web-dev-qa-db-ja.com

C#のコンボボックス内にチェックボックスを追加する方法

C#のcomboBox内にチェックボックスを追加したい。私の目的は、ユーザーが1つのComboBoxから複数の値を選択できるようにすることです(すべてチェックおよびすべてチェック解除)。

助けてください

11
Vyas Dev

独自のレンダリング戦略を提供し、「手動」でCheckBoxを追加して、ComboBoxコントロールを拡張する必要があります。

これらのオープンソースプロジェクトを使用する準備ができています:

http://www.codeproject.com/KB/combobox/CheckComboBox.aspxhttp://www.codeproject.com/KB/combobox/extending_combobox.aspx

8
Larry

ユーザーが自分の選択を表示する可能性がないため、ComboBoxコントロールの誤った使用法です。複数選択の場合、このCheckedListBoxコントロールを検討することをお勧めします。

MSDNへのリンク

2
Allender

http://dropdowncheckboxes.codeplex.com/ にASP.NETオープンソースコントロールがあり、これは私が使用していて非常に満足しています。 WinFormsオープンソース管理もあります http://www.codeproject.com/KB/combobox/extending_combobox.aspx それほど強力ではないように見えますが、誰かが両方の長所を組み合わせることができるかもしれません。適切に実装されていれば、これはツールキットへの素晴らしい追加です。上記の2つの実装は、選択されたすべての項目を表示し、縮小された領域で優れたグループ化を使用して、関連するチェックボックスをいくつか提供します。 ASP.NETバージョンへの私の追加は、チェックされたファイルのリストが長すぎる場合にフルパスではなくファイル名のみを使用できるようにすることでした。完全なコードについては、上記のリンクを参照してください。以下は、ポストバックハンドラーでUpdateSelectionの代わりに呼び出される私の追加です。

// Update the caption assuming that the items are files 
// If the caption is too long, eliminate paths from file names 
public void UpdateSelectionFiles(int maxChars) { 
  StringBuilder full = new StringBuilder(); 
  StringBuilder shorter = new StringBuilder(); 
  foreach (ListItem item in Items) { 
    if (item.Selected) { 
      full.AppendFormat("{0}; ", item.Text);
      shorter.AppendFormat("{0}; ", new FileInfo(item.Text).Name); 
    } 
  } 
  if (full.Length == 0) Texts.SelectBoxCaption = "Select..."; 
  else if (full.Length <= maxChars) Texts.SelectBoxCaption = full.ToString(); 
  else Texts.SelectBoxCaption = shorter.ToString(); 
} 
0
Mick Bruno