コンボコントロールに項目を設定する方法について説明します。
コンボコントロールで、項目を追加するには、Items プロパティに項目のコレクションを追加する方法とデータソースを使う2通りの方法があります。
Items プロパティを使って、コレクションに項目を設定する場合は、コンボコントロールの項目(ListItem)のオブジェクトを生成し、Items プロパティが参照するListItemCollection コレクションに追加します。 また、個々の項目を表すListItemは、マルチカラムを表現するためのサブアイテム(SubItem)を持っています。
一方、リストに表示する項目をデータセットなどから行う場合、データソースを使用して設定することができます。データソースを使用した場合は、Visual Studio 標準のDataGridView のようにデータソースを設定するだけで、自動的にデータと接続することができます。
それぞれの設定方法については、下記に解説しています。
コンボコントロールで、項目を選択また選択された項目のインデックスを取得するには、SelectedIndex プロパティを使用します。
次のサンプルコードは、SelectedIndex プロパティを使用して2番目(インデックス1)の項目を選択します。
また、項目の内容から項目を選択するには、FindStringExact メソッドを利用してインデックスを取得し、SelectedIndex プロパティに設定します。
次のサンプルコードは、FindStringExact メソッドを使用して項目の内容に一致する項目を選択します。
Imports GrapeCity.Win.Editors ' コンボコントロールにカラムを追加 GcComboBox1.ListColumns.AddRange(New ListColumn() {New ListColumn("コード"), New ListColumn("名称")}) ' コンボコントロールに項目を追加 GcComboBox1.Items.AddRange(New ListItem() { _ New ListItem(New SubItem() {New SubItem("0001"), New SubItem("営業部")}), _ New ListItem(New SubItem() {New SubItem("0002"), New SubItem("開発部")}), _ New ListItem(New SubItem() {New SubItem("0003"), New SubItem("総務部")}), _ New ListItem(New SubItem() {New SubItem("0004"), New SubItem("経理部")}) _ }) ' 名称が「開発部」に合致する項目を選択 GcComboBox1.SelectedIndex = GcComboBox1.FindStringExact("開発部", -1, 1)
using GrapeCity.Win.Editors; // コンボコントロールにカラムを追加 gcComboBox1.ListColumns.AddRange(new ListColumn[] { new ListColumn("コード"), new ListColumn("名称")}); // コンボコントロールに項目を追加 gcComboBox1.Items.AddRange(new ListItem[] { new ListItem(new SubItem[] {new SubItem("0001"), new SubItem("営業部")}), new ListItem(new SubItem[] {new SubItem("0002"), new SubItem("開発部")}), new ListItem(new SubItem[] {new SubItem("0003"), new SubItem("総務部")}), new ListItem(new SubItem[] {new SubItem("0004"), new SubItem("経理部")}) }); // 名称が「開発部」に合致する項目を選択 gcComboBox1.SelectedIndex = gcComboBox1.FindStringExact("開発部", -1, 1);
SelectedIndex プロパティがコントロールが選択している項目であるのに対し、ListSelectedItemIndex プロパティは、リストボックスでフォーカスがある項目のインデックスを取得できます。
例えば、リストボックス上で上下矢印キーにより選択(フォーカスのある)項目が変更されたときや、 AutoSelect プロパティにより、入力された文字で始まる項目が自動選択されたとき、ListSelectedItemIndexChanged イベントが発生し、フォーカスのある項目のインデックスはListSelectedItemIndex プロパティで取得できます。
コンボコントロールでは、項目を検索するために、上記のFindStringExact メソッドと合わせて3種類のメソッドを用意しています。これらのメソッドは、該当する最初の項目だけでなく、該当するすべての項目を保持するコレクションを戻すことができます。また、FindObject メソッドはオブジェクト型に対応しているので、DateTime 型などを設定したサブアイテムも検索の対象とすることができます。
次のサンプルコードは、FindObject メソッドを使ってDateTime型のサブアイテムから項目を検索する例です。
Imports GrapeCity.Win.Editors ' コンボコントロールにカラムを追加 GcComboBox1.ListColumns.AddRange(New ListColumn() {New ListColumn("カラム1"), New ListColumn("カラム2"), New ListColumn("カラム3")}) GcComboBox1.ListColumns(0).DataDisplayType = DataDisplayType.Image Dim type0 As Image = Image.FromFile("C:\Check0.bmp") Dim type1 As Image = Image.FromFile("C:\Check1.bmp") ' コンボコントロールに項目を追加 GcComboBox1.Items.AddRange(New ListItem() { _ New ListItem(New SubItem() {New SubItem(type0), New SubItem("AAA"), New SubItem(DateTime.Parse("2015/2/28"))}), _ New ListItem(New SubItem() {New SubItem(type1), New SubItem("BBB"), New SubItem(DateTime.Parse("2015/3/28"))}), _ New ListItem(New SubItem() {New SubItem(type0), New SubItem("CCC"), New SubItem(DateTime.Parse("2015/4/28"))}), _ New ListItem(New SubItem() {New SubItem(type1), New SubItem("DDD"), New SubItem(DateTime.Parse("2015/5/28"))}) _ }) ' FindObjectメソッドを使って検索 Dim matchedItem As MatchedListItemCollection Dim item As ListItem matchedItem = GcComboBox1.FindObject(DateTime.Parse("2015/4/28"), 2) For Each item In matchedItem ' 検索結果をデバッグウィンドウに表示します。 System.Console.WriteLine(item.SubItems(1).Value.ToString()) Next
using GrapeCity.Win.Editors; // コンボコントロールにカラムを追加 gcComboBox1.ListColumns.AddRange(new ListColumn[] {new ListColumn("カラム1"), new ListColumn("カラム2"), new ListColumn("カラム3")}); gcComboBox1.ListColumns[0].DataDisplayType = DataDisplayType.Image; Image type0 = Image.FromFile("C:\\Check0.bmp"); Image type1 = Image.FromFile("C:\\Check1.bmp"); // コンボコントロールに項目を追加 gcComboBox1.Items.AddRange(new ListItem[] { new ListItem(new SubItem[] {new SubItem(type0), new SubItem("AAA"), new SubItem(DateTime.Parse("2015/2/28"))}), new ListItem(new SubItem[] {new SubItem(type1), new SubItem("BBB"), new SubItem(DateTime.Parse("2015/3/28"))}), new ListItem(new SubItem[] {new SubItem(type0), new SubItem("CCC"), new SubItem(DateTime.Parse("2015/4/28"))}), new ListItem(new SubItem[] {new SubItem(type1), new SubItem("DDD"), new SubItem(DateTime.Parse("2015/5/28"))}) }); // FindObjectメソッドを使って検索 MatchedListItemCollection matchedItem; matchedItem = gcComboBox1.FindObject(DateTime.Parse("2015/4/28"), 2); foreach (ListItem item in matchedItem) { // 検索結果をデバッグウィンドウに表示します。 System.Console.WriteLine(item.SubItems[1].Value.ToString()); }
リストボックスに表示された項目はソート機能により昇順または降順に並び変えることが可能です。項目を並び変えるにはListSortColumnIndex プロパティを使用してソートの基準となるカラムをインデックスで定義します。
ソートの方法(昇順または降順)を設定するには、カラムの SortOrder プロパティを使用します。SortOrderは、System.Windows.Forms.SortOrder 型のプロパティです。
SortOrderの値 | 説明 |
---|---|
None | ソートなし |
Ascending | 昇順 |
Descending | 降順 |
次のサンプルコードは、先頭のカラムを基準に昇順でソートする例です。
Imports GrapeCity.Win.Editors ' リストボックスにカラムを追加 GcComboBox1.ListColumns.AddRange(New ListColumn() {New ListColumn("カラム1"), New ListColumn("カラム2")}) ' リストボックスに項目を追加 GcComboBox1.Items.AddRange(New ListItem() { _ New ListItem(New SubItem(){New SubItem("BBB"), New SubItem("ううう")}), _ New ListItem(New SubItem(){New SubItem("CCC"), New SubItem("あああ")}), _ New ListItem(New SubItem(){New SubItem("AAA"), New SubItem("いいい")}) _ }) ' ソートの基準をカラム1に指定し、ソート方法を昇順に設定 GcComboBox1.ListSortColumnIndex = 0 GcComboBox1.ListColumns(0).SortOrder = SortOrder.Ascending
using GrapeCity.Win.Editors; // リストボックスにカラムを追加 gcComboBox1.ListColumns.AddRange(new ListColumn[] {new ListColumn("カラム1"), new ListColumn("カラム2")}); // リストボックスに項目を追加 gcComboBox1.Items.AddRange(new ListItem[] { new ListItem(new SubItem[]{new SubItem("BBB"), new SubItem("ううう")}), new ListItem(new SubItem[]{new SubItem("CCC"), new SubItem("あああ")}), new ListItem(new SubItem[]{new SubItem("AAA"), new SubItem("いいい")}) }); // ソートの基準をカラム1に指定し、ソート方法を昇順に設定 gcComboBox1.ListSortColumnIndex = 0; gcComboBox1.ListColumns[0].SortOrder = SortOrder.Ascending;
ヘッダに用意されたソート機能を使用すれば、アプリケーション実行時にユーザーが動的にソートを行うこともできます。ユーザーにソートを許可するには、 ListHeader クラスのClickable プロパティをTrue に設定します。
Clickable プロパティをTrueに設定するとヘッダをクリックすることで、クリックしたカラムの内容で項目がソートされます。ヘッダをクリックする毎に並び替えが昇順と降順で切り替わります。項目が昇順でソートされているか、降順でソートされているかは、ヘッダに表示されたソートインジケータの向きで判別することができます。
次のサンプルコードは、ヘッダでのソートを許可する例です。
Imports GrapeCity.Win.Editors ' リストボックスにカラムを追加 GcComboBox1.ListColumns.AddRange(New ListColumn() {New ListColumn("カラム1"), New ListColumn("カラム2")}) ' リストボックスに項目を追加 GcComboBox1.Items.AddRange(New ListItem() { _ New ListItem(New SubItem(){New SubItem("BBB"), New SubItem("ううう")}), _ New ListItem(New SubItem(){New SubItem("CCC"), New SubItem("あああ")}), _ New ListItem(New SubItem(){New SubItem("AAA"), New SubItem("いいい")}) _ }) ' ヘッダをクリックできるように設定 GcComboBox1.ListColumns(0).Header.Clickable = True GcComboBox1.ListColumns(1).Header.Clickable = True
using GrapeCity.Win.Editors; // リストボックスにカラムを追加 gcComboBox1.ListColumns.AddRange(new ListColumn[] {new ListColumn("カラム1"), new ListColumn("カラム2")}); // リストボックスに項目を追加 gcComboBox1.Items.AddRange(new ListItem[] { new ListItem(new SubItem[]{new SubItem("BBB"), new SubItem("ううう")}), new ListItem(new SubItem[]{new SubItem("CCC"), new SubItem("あああ")}), new ListItem(new SubItem[]{new SubItem("AAA"), new SubItem("いいい")}) }); // ヘッダをクリックできるように設定 gcComboBox1.ListColumns[0].Header.Clickable = true; gcComboBox1.ListColumns[1].Header.Clickable = true;