ComboBoxとListView (4/4)
作成:2014-02-15 11:45
更新:2014-02-15 11:45
更新:2014-02-15 11:45
■ListViewの複数項目選択
ComboBoxとListViewの違いは、ただリスト表示かポップアップ表示か、ということだけなのか? もちろん、違います。ListViewでは、複数の項目を選択することができるのです。
ListViewには、「Selection Mode」というプロパティが用意されています。デフォルトでは「Single」に設定されていますが、この状態だと常に1つだけが選択されるようになるのです。
この値を「Multiple」に変更してみましょう。すると、それぞれの項目をクリックするごとにチェックがON/OFFされ、いくつもの項目が選択状態となるように変わります。
複数選択を可能にした場合も、選択時の処理はSelectionChangedイベントで行うことができます。ただし、選択項目の情報はSelectedItemでは取得できません。これは「SelectedItems」を使います。複数形の「s」がついていますね?
このSelectedItemsは、IListというコレクションのインターフェイスとして値が取得されます。これはジェネリック(総称型)というのを使って、そこに保管されている値を特定することができます。
下に、先ほどのサンプルを複数項目選択が可能なように変更したものを掲載しておきました。ここでは選択された項目を以下のようにして取り出しています。
この「IListとして選択項目を取り出し、そこから順にListBoxItemを取り出していく」という流れさえ分かれば、複数項目の選択処理はそう難しくはありません。
これで一応、いくつかの項目を選択するという基本はわかりましたが、実をいえばComboBoxやListViewというのは、こんな単純な使い方しかできないわけではないのです。非常に複雑なオブジェクトを項目として設定し、表示させることもできます。また同様の働きをするものとして、他にもGridViewといったものもあります。これらの使いこなしについては、改めて取り上げることにしましょう。
ListViewには、「Selection Mode」というプロパティが用意されています。デフォルトでは「Single」に設定されていますが、この状態だと常に1つだけが選択されるようになるのです。
この値を「Multiple」に変更してみましょう。すると、それぞれの項目をクリックするごとにチェックがON/OFFされ、いくつもの項目が選択状態となるように変わります。
複数選択を可能にした場合も、選択時の処理はSelectionChangedイベントで行うことができます。ただし、選択項目の情報はSelectedItemでは取得できません。これは「SelectedItems」を使います。複数形の「s」がついていますね?
このSelectedItemsは、IListというコレクションのインターフェイスとして値が取得されます。これはジェネリック(総称型)というのを使って、そこに保管されている値を特定することができます。
下に、先ほどのサンプルを複数項目選択が可能なように変更したものを掲載しておきました。ここでは選択された項目を以下のようにして取り出しています。
IList<Object> items = list1.SelectedItems as IList<Object>;IList<Object>は、ObjectインスタンスがまとめられたIListインスタンスを示します。そして、foreachなどを使い、ここから順にオブジェクトを取り出して処理していきます。取り出したものは、ListBoxItemにキャストして利用するのを忘れないようにしましょう。
この「IListとして選択項目を取り出し、そこから順にListBoxItemを取り出していく」という流れさえ分かれば、複数項目の選択処理はそう難しくはありません。
これで一応、いくつかの項目を選択するという基本はわかりましたが、実をいえばComboBoxやListViewというのは、こんな単純な使い方しかできないわけではないのです。非常に複雑なオブジェクトを項目として設定し、表示させることもできます。また同様の働きをするものとして、他にもGridViewといったものもあります。これらの使いこなしについては、改めて取り上げることにしましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
private void List1_Changed(object sender, SelectionChangedEventArgs e) { IList<Object> items = list1.SelectedItems as IList<Object>; if (items == null) return; string msg = "you seleted: "; foreach (Object item in items) { msg += "\"" + ((ListBoxItem)item).Content + "\" "; } textblock1.Text = msg; }
※関連コンテンツ