あなたはOwnerDrawFixed
にそのDrawMode
を設定し、DrawItem
イベントを処理することにより、ComboBox
自分自身の描画アイテムを扱うことができます。そして、あなたが望む項目の下にその区切りを描くことができます:
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
var comboBox = sender as ComboBox;
var txt = "";
if (e.Index > -1)
txt = comboBox.GetItemText(comboBox.Items[e.Index]);
e.DrawBackground();
TextRenderer.DrawText(e.Graphics, txt, comboBox.Font, e.Bounds, e.ForeColor,
TextFormatFlags.VerticalCenter | TextFormatFlags.Left);
if (e.Index == 2 && !e.State.HasFlag(DrawItemState.ComboBoxEdit)) //Index of separator
e.Graphics.DrawLine(Pens.Red, e.Bounds.Left, e.Bounds.Bottom - 1,
e.Bounds.Right, e.Bounds.Bottom - 1);
}
コードe.State.HasFlag(DrawItemState.ComboBoxEdit)
のこの部分は、コントロールの編集部分に区切りを描く防ぐためです。
注
- 答えは、問題のために尋ね要件を満たしています。しかし、一部のユーザーは、セパレータだけでなく、グループテキストでアイテムをグループ化することが必要な場合があります。このようなグループテキストをサポートする
ComboBox
を見るには、Brad Smithの A ComboBox Control with Groupigをご覧ください。