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