1
我有下面的代码的用户控件:与颜色选择器所有者绘制组合框
public partial class ColorComboBox : ComboBox
{
public ColorComboBox()
{
InitializeComponent();
this.DropDownStyle = ComboBoxStyle.DropDownList;
this.DrawMode = DrawMode.OwnerDrawFixed;
string[] colorNames = System.Enum.GetNames(typeof(KnownColor));
this.Items.AddRange(colorNames);
}
protected override void OnDrawItem(DrawItemEventArgs e)
{
if (e.Index < 0) return;
this.SuspendLayout();
string s = (string)this.Items[ e.Index ];
using (Brush b = new SolidBrush(Color.FromName(s)))
{
e.Graphics.DrawRectangle(Pens.Black, 2, e.Bounds.Top + 1, 20, 11);
e.Graphics.FillRectangle(b, 3, e.Bounds.Top + 2, 19, 10);
e.Graphics.DrawString(s, this.Font, Brushes.Black, 25, e.Bounds.Top);
}
e.DrawFocusRectangle();
this.ResumeLayout();
}
}
增加ComboBox的实例的形式,我有一个奇怪的问题后,鼠标指针下的每个项目都将该项目更改为粗体。
有没有人知道为什么会发生这种情况?
谢谢。
这些'SuspendLayout'和'ResumeLayout'调用sho没有必要。 – LarsTech
@LarsTech:你说得对,他们没有必要,所以我删除了这些陈述。该代码现在可以在添加'e.DrawBackround()'后生效。 – Intrepid