0

複数選択が有効になっているリストボックスがあり、選択したさまざまな値を読み取ろうとしています

私は多くのスニペットを試しましたが、ここに最新の2つがあります:

 For i = 0 To ListBox1.SelectedIndices.Count
     MsgBox(ListBox1.Items((ListBox1.SelectedIndices(i))).value)
 Next


 For i = 0 To ListBox1.SelectedItems.Count
     MsgBox(ListBox1.SelectedItems(i).value)
 Next

何らかの理由で、どのアプローチを選択しても、アイテムの値を読み取ることができません

私のリストボックスはデータにバインドされているため、公開すると問題が解決する可能性があることをフォーラムで知りましたが、解決しませんでした

Intellisenseでさえ多くの情報を表示しないので、私はためらっています.

Equals
GetHashCode
GeType
ReferenceEquals
ToString

私が間違っていたアイデアはありますか?

前もって感謝します

編集:

ここに画像の説明を入力

4

2 に答える 2

2

私は、VB でデータ GUI ツールを使用することはあまり好きではありません。そうは言っても、あなたが探しているのはこれだと思います:

For Each dvRow As DataRowView In Me.Listbox1.SelectedItems
  MessageBox.Show(dvRow("Id").ToString)
Next

Last Name フィールドに興味がある場合は、「Id」を「Last Name」に変更します。

また、MessageBox.Show代わりに使用しましたMsgBoxMsgBoxVB6の残り物です。

于 2012-07-23T02:03:36.390 に答える
1

databound を使用する場合ListBox、項目はオブジェクトではありません(オブジェクトとプロパティListBoxItemがあると予想されます)。むしろ、データ ソースからの型です。コレクション (および などのそのバリエーション) はオブジェクトのコレクションとして定義され、実行時の型はデータ ソースから取得されます。このようなことを試しましたか?TextValueItemsSelectedItems

For i = 0 To ListBox1.SelectedItems.Count
    MsgBox(ListBox1.SelectedItems(i).ToString())
Next

コメントで、データ ソースがオブジェクトを含む DB オブジェクトであることを示しましたString。などのクラスのコレクションがある場合は、次のPerson方法で取得できます。

For i = 0 To ListBox1.SelectedItems.Count
    MsgBox(DirectCast(ListBox1.SelectedItems(i), Person).FirstName)
Next

For Eachループ中に選択した項目のコレクションが変更されない限り、 を使用しても同じ結果が得られるはずです。

For Each p As Person in ListBox1.SelectedItems
    MsgBox(p.FirstName)
Next

注: 現時点では Visual Studio を使用していないため、これはテストされていないコードです。

編集: スクリーンショットから、Value Memberが という名前のプロパティに設定されていることがわかりますId。それがuniqueidentifierデータベースの列である場合、ListBox の実行時の型は になりますGuid

于 2012-07-23T02:03:26.597 に答える