2012-04-26 6 views
2

私はグループ間などの何らかの線を考えていました。アイテムをグループに分ける方法はありますか?それらを着色することはオプションですが、それは悪く見えるだけです。コンボボックスのアイテムを視覚的に分割する方法はありますか?

+0

誰かが代わりにリストのテーブルをドロップダウンところ私が見てきたが、そこに重いカスタマイズがあって、それはちょっと不格好でした。これには解決策がありますが、もちろん[Telerikの複数列コンボボックス](http://www.telerik.com/products/winforms/multicolumncombo.aspx)などの費用もかかります。 –

+0

ドロップダウンの各項目の間に水平線が必要ですか? –

+0

@JohnArlen はい、できます。 – Alternatex

答えて

0

私はあなたが要素の視覚化を無効にすることができると思いますが、それは複雑な解決策です。または、行(中空の項目)を手動で挿入し、選択した場合は元の状態に戻すことができます。

デフォルトの解決策はありません。

+0

ええ、私は、あらかじめ作られた解決策や機能があると思っていました。 – Alternatex

0

コンボボックスにセパレータ項目を挿入することができます。空の文字列、ダッシュなどを表示するアイテムを使うことができます。残念ながら、WinFormsを使用する場合、これは一般的に容易ではありません。 WPFを使用していた場合、これをよりエレガントに行うことができます。

+1

これはセパレータを実現する非常に簡単な方法です。ただし、ユーザーがセパレータ項目を「選択」しようとすると、ロジックを追加する必要があります(たとえば、前の選択を再選択するなど)。最終的にはちょっとしたものですが、厄介なUIに満足すれば十分です。 –

2

あなた自身を描くのは簡単です。 DrawMode = OwnerDrawFixedを設定して、アイテムをレンダリングする、コンボを導き出す:

protected override void OnDrawItem(DrawItemEventArgs e) 
{ 
    e.DrawBackground(); 
    if(e.State == DrawItemState.Focus) 
     e.DrawFocusRectangle(); 
    var item = this.Items[e.Index]; 
    using(var brush = new SolidBrush(e.ForeColor)) 
    { 
     e.Graphics.DrawString(item.ToString(), e.Font, brush, e.Bounds); 
    } 
    e.Graphics.DrawLine(SystemPens.ControlText, e.Bounds.X, e.Bounds.Y, e.Bounds.Right, e.Bounds.Y); 

    base.OnDrawItem(e); 
} 
関連する問題