2016-09-16 12 views
1

Windowsフォームアプリケーションでは、ComboBoxがあります。アイテムは、下の図のように表示する必要があります。最初のグループ分けのためだけにソリッドセパレータが必要です。その他の項目は、グループ化ヘッダーなしで表示することができます。 ComboBoxを使用すると、要件ごとに達成できます。また、サードパーティ製のコントロールを試す必要があります。貴重な提案が役に立ちます。Windowsフォームアプリケーションのコンボボックスアイテムのグループ化

enter image description here

答えて

2

あなたは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)のこの部分は、コントロールの編集部分に区切りを描く防ぐためです。

enter image description here

  • 答えは、問題のために尋ね要件を満たしています。しかし、一部のユーザーは、セパレータだけでなく、グループテキストでアイテムをグループ化することが必要な場合があります。このようなグループテキストをサポートするComboBoxを見るには、Brad Smithの A ComboBox Control with Groupigをご覧ください。
関連する問題