リストコントロールに項目を設定する方法について説明します。
リストコントロールに項目を追加するには、Items プロパティに項目のコレクションを追加する方法とデータソースを使う2通りの方法があります。
Items プロパティを使って、コレクションに項目を設定する場合は、リストコントロールの項目(ListItem)のオブジェクトを生成し、Items プロパティが参照するListItemCollection コレクションに追加します。 また、個々の項目を表すListItemは、マルチカラムを表現するためのサブアイテム(SubItem)を持っています。
一方、リストに表示する項目をデータセットなどから行う場合、データソースを使用して設定することができます。データソースを使用した場合は、Visual Studio 標準のDataGridView のようにデータソースを設定するだけで、自動的にデータと接続することができます。
それぞれの設定方法については、下記に解説しています。
リストコントロールの項目は、マウス操作またはキーボードの上下キーで選択することができます。リストコントロールの項目の選択方法には、項目を1つだけ選択する単一選択と複数の項目を選択する複数選択があります。また項目を選択できないように設定することもできます。 選択方法の設定はSelectionMode プロパティで行います。
SelectionModeの値 | 説明 |
---|---|
MultiExtended | 複数の項目を選択できます。また、Shift キー、Ctrl キー、および方向キーを使用して項目を選択できます。 |
MultiSimple | 複数の項目を選択できます。 |
None | 項目を選択できません。 |
One | 1 つの項目だけ選択できます。 |
選択された項目のオブジェクトを取得するには、単一選択の場合は、SelectedItem プロパティで取得することができます。
複数選択された項目を取得するには、SelectedItems プロパティを使用します。SelectedItems プロパティは、選択されたリストの項目の コレクションです。
選択された項目のインデックスを取得する場合は、単一選択の場合は、SelectedIndex プロパティを使用します。また、複数選択された項目のインデックスを取得するには、SelectedIndices プロパティを使用します。
リストコントロールでは、項目を検索するために3種類のメソッドを用意しています。これらのメソッドは、該当する最初の項目だけでなく、該当するすべての項目を保持するコレクションを戻すことができます。また、FindObject メソッドはオブジェクト型に対応しているので、DateTime型などを設定したサブアイテムも検索の対象とすることができます。
次のサンプルコードは、FindObject メソッドを使ってDateTime型のサブアイテムから項目を検索する例です。
Imports GrapeCity.Win.Editors ' リストコントロールにカラムを追加 GcListBox1.Columns.AddRange(New ListColumn() {New ListColumn("カラム1"), New ListColumn("カラム2"), New ListColumn("カラム3")}) GcListBox1.Columns(0).DataDisplayType = DataDisplayType.Image Dim type0 As Image = Image.FromFile("C:\Check0.bmp") Dim type1 As Image = Image.FromFile("C:\Check1.bmp") ' リストコントロールに項目を追加 GcListBox1.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 = GcListBox1.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; // リストコントロールにカラムを追加 gcListBox1.Columns.AddRange(new ListColumn[] {new ListColumn("カラム1"), new ListColumn("カラム2"), new ListColumn("カラム3")}); gcListBox1.Columns[0].DataDisplayType = DataDisplayType.Image; Image type0 = Image.FromFile("C:\\Check0.bmp"); Image type1 = Image.FromFile("C:\\Check1.bmp"); // リストコントロールに項目を追加 gcListBox1.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 = gcListBox1.FindObject(DateTime.Parse("2015/4/28"), 2); foreach (ListItem item in matchedItem) { // 検索結果をデバッグウィンドウに表示します。 System.Console.WriteLine(item.SubItems[1].Value.ToString()); }
リストコントロールに表示された項目はソート機能により昇順または降順に並び変えることが可能です。項目を並び変えるにはSortColumnIndex プロパティを使用してソートの基準となるカラムをインデックスで定義します。
ソートの方法(昇順または降順)を設定するには、カラムの SortOrder プロパティを使用します。SortOrderは、System.Windows.Forms.SortOrder型のプロパティです。
値 | 説明 |
---|---|
SortOrder.None | ソートなし |
SortOrder.Ascending | 昇順 |
SortOrder.Descending | 降順 |
次のサンプルコードは、先頭のカラムを基準に昇順でソートする例です。
Imports GrapeCity.Win.Editors ' リストコントロールにカラムを追加 GcListBox1.Columns.AddRange(New ListColumn() {New ListColumn("カラム1"), New ListColumn("カラム2")}) ' リストコントロールに項目を追加 GcListBox1.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に指定し、ソート方法を昇順に設定 GcListBox1.SortColumnIndex = 0 GcListBox1.Columns(0).SortOrder = SortOrder.Ascending
using GrapeCity.Win.Editors; // リストコントロールにカラムを追加 gcListBox1.Columns.AddRange(new ListColumn[] {new ListColumn("カラム1"), new ListColumn("カラム2")}); // リストコントロールに項目を追加 gcListBox1.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に指定し、ソート方法を昇順に設定 gcListBox1.SortColumnIndex = 0; gcListBox1.Columns[0].SortOrder = SortOrder.Ascending;
ヘッダに用意されたソート機能を使用すれば、アプリケーション実行時にユーザーが動的にソートを行うこともできます。ユーザーにソートを許可するには、ヘッダのClickable プロパティをTrueに設定します。
Clickable プロパティをTrueに設定するとヘッダをクリックすることで、クリックしたカラムの内容で項目がソートされます。ヘッダをクリックする毎に並び替えが昇順と降順で切り替わります。項目が昇順でソートされているか、降順でソートされているかは、ヘッダに表示されたソートインジケータの向きで判別することができます。
次のサンプルコードは、ヘッダでのソートを許可する例です。
Imports GrapeCity.Win.Editors ' リストコントロールにカラムを追加 GcListBox1.Columns.AddRange(New ListColumn() {New ListColumn("カラム1"), New ListColumn("カラム2")}) ' リストコントロールに項目を追加 GcListBox1.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("いいい")}) _ }) ' ヘッダをクリックできるように設定 GcListBox1.Columns(0).Header.Clickable = True GcListBox1.Columns(1).Header.Clickable = True
using GrapeCity.Win.Editors; // リストコントロールにカラムを追加 gcListBox1.Columns.AddRange(new ListColumn[] {new ListColumn("カラム1"), new ListColumn("カラム2")}); // リストコントロールに項目を追加 gcListBox1.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("いいい")}) }); // ヘッダをクリックできるように設定 gcListBox1.Columns[0].Header.Clickable = true; gcListBox1.Columns[1].Header.Clickable = true;