zukucode
主にWEB関連の情報を技術メモとして発信しています。

VB.NET 複数選択のリストボックスListBoxで選択された項目を配列で取得する

VB.NETの複数選択のリストボックスで、選択された項目を配列で取得する方法を紹介します。

ForEachなどのループ処理で1つづつ選択されているかどうか判定して、配列に追加していく方法もありますが、無名関数(ラムダ式)を使用すればシンプルに1行で取得できます。

リスト
ValueTextSeleted
1りんごTrue
2ばななFalse
3みかんTrue
4いちごTrue
Dim arr As ListItem()
arr = ListItem1.Items.Cast(Of ListItem).Where(Function(i) i.Selected = True).ToArray

Whereの中で指定しているのが無名関数です。

無名関数が1項目ごとに実行され、無名関数の引数のiには現在の項目が渡されます。

無名関数の返却値がTrueの場合の項目のみ抽出されるため、選択中の項目(Selected = True)のみTrueで返却するようにしています。

1行で記載しているため、わかりにくいかもしれませんが、無名関数を複数行で記載すると以下のようになります。

Dim arr As ListItem()
arr = ListItem1.Items.Cast(Of ListItem).Where(Function(i)
                                                  Return i.Selected = True
                                              End Function).ToArray

項目の値を配列で取得

項目ではなく、項目の値を配列で取得したい場合は、以下のようにします。

Dim str As String()
str = ListItem1.Items.Cast(Of ListItem).Where(Function(i) i.Selected = True).Select(Function(i) i.Value).ToArray
Console.WriteLine(str)

'出力結果
'{"1", "3", "4"}

Where句の無名関数で絞り込んだあと、Select句の無名関数を実行します。

無名関数の返却値が抽出されるため、項目の値(Value)を返却するようにしています。

テキスト値を取得したい場合は以下のようにTextを返却するようにします。

Dim str As String()
ListItem1.Items.Cast(Of ListItem).Where(Function(i) i.Selected = True).Select(Function(i) i.Text).ToArray
Console.WriteLine(str)

'出力結果
'{"りんご", "みかん", "いちご"}

Value:Textの形式のように、無名関数の中で自由に返却値を加工できます。

Dim str As String()
ListItem1.Items.Cast(Of ListItem).Where(Function(i) i.Selected = True).Select(Function(i) i.Value & ":" & i.Text).ToArray
Console.WriteLine(str)

'出力結果
'{"1:りんご", "3:みかん", "4:いちご"}

'複数行で記載
ListItem1.Items.Cast(Of ListItem).Where(Function(i) i.Selected = True).Select(Function(i)
                                                                                  Return i.Value & ":" & i.Text
                                                                              End Function).ToArray

カンマ区切りの文字列で取得

VB.NET 配列をカンマ区切りの文字列に変換するで紹介した方法と組み合わせれば、選択中の値をカンマ区切りやスラッシュ区切りの文字列に簡単に変換することができます。

'配列で取得
Dim str As String
str = String.Join(",", ListItem1.Items.Cast(Of ListItem).Where(Function(i) i.Selected = True).Select(Function(i) i.Value).ToArray)
Console.WriteLine(str)

'出力結果
'1,3,4

関連記事

  • VB.NET YYYYMMDD形式の文字列を日付型に型変換する

    VB.NETでYYYYMMDD形式の文字列を日付型に型変換する方法を紹介します。最初にYYYY/MM/DDのように、年月日の区切りに/を追加します。/区切りの文字列にするとCDateで日付型に型変換で...


  • VB.NET 文字列の全角と半角の変換を行う

    VB.NETで文字列を全角→半角や半角→全角に変換するにはStrConv関数を使用します。StrConvの第1引数に対象文字列を指定し、第2引数に変換方法を指定します。


  • VB.NET TypeOfで変数の型判定・比較を行う

    VB.NETで変数の型をチェックするにはTypeOfを使用します。TypeOf チェックしたい変数名 Is 判定したい型の形式で指定します。


  • VB.NET StringBuilderの末尾の1文字を削除する

    StringBuilderで末尾の1文字だけ削除したいときは以下のようにします。位置の指定について、1文字目は0から始まるため、文字列の長さ(Length)-1の位置が末尾の位置となります。末尾の位置...


  • VB.NET 指定した文字列を削除する

    VB.NETで指定した文字列を削除する方法を紹介します。Replace関数は指定した文字列を別の文字列に置換する関数です。置換する文字列に空文字を指定すれば、指定した文字列が削除される形になります。J...


  • VB.NET ダブルクォーテーションを文字列として扱う方法

    VB.NETで文字列を扱うときは以下のようにダブルクォーテーションで囲います。文字列の中にダブルクォーテーションを含めたい場合は少し工夫が必要です。以下のようにダブルクォーテーションを2つにすれば1つ...


  • VB.NET 文字列を連結する便利な方法まとめ

    VB.NETでは文字列の連結は文字列同士を&で結合できます。Visual Studio 2015からの新機能として文字列補間が可能になりました。以下のように、文字列の前に$をつけることにより、文字列の...


  • VB.NET 文字列をカナ、全角半角、大文字小文字などを区別せずに比較する方法

    VB.NETで文字列をひらがなカタカナ、全角半角、大文字小文字を区別せずに、前方一致や部分一致で検索する方法をまとめて紹介します。例えばあいうえおという文字列にうえという文字列が含まれているかどうか判...


  • VB.NET バイト配列と文字列を相互変換する

    バイト配列を文字列を相互変換する方法を紹介します。データベースからblob型の値を取得した時や、アップロードされたファイルの中身を取得した時などはバイト配列で取得することが多いです。エンコード形式を指...


  • VB.NET 任意の区切り文字のある文字列を配列に変換する

    VB.NETで任意の区切り文字のある文字列を配列に変換する方法を紹介します。文字列を配列に変換するにはSplitを使います。文字列.Split(区切り文字)で配列に変換できます。区切り文字はCharで...