C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■103434 / )  Re[1]: ListBox の使い方
□投稿者/ 魔界の仮面弁士 (3812回)-(2024/11/14(Thu) 15:36:07)
2024/11/15(Fri) 12:15:36 編集(投稿者)

No103431 (星は昴 さん) に返信
>  ListBox に表示されている項目のテキストを取り出すにはどうしたらいいのですか。まったくの感で(笑)
>    for (int i = 0; ListBox.Items.Count - 1; i++)
>       string fName = ListBox.Items[i];

DisplayMember プロパティが未設定なら
 = listBox1.Items[i].ToString()
でも良いのですけれど、バインド時にも対応できるよう汎用的に書くなら、
 = listBox1.GetItemText(listBox1.Items[i]);
ですね。

全件まとめて取り出すならこんな感じ。

string[] names = listBox1.Items.OfType<object>().Select(o => listBox1.GetItemText(o)).ToArray();


また、「選択されている項目」については、listBox1.SelectedIndex で
選択されている先頭項目の番号(0〜)が返されます。未選択時は -1 です。

複数選択モード(SelectionMode プロパティで設定)が指定されている場合は、
listBox1.SelectedIndex の代わりに listBox1.SelectedIndices
listBox1.SelectedItem  の代わりに listBox1.SelectedItems
という複数形プロパティを使います。(SelectedValue の複数形はありません)

現在選択されている項目のテキストならば、単一選択であれば
listBox1.GetText(listBox1.SelectedItem) ですが、ほぼ同じものが
listBox1.Text でも得られます。複数選択の時には、
上記の複数形プロパティをループ処理して GetText メソッドで取り出しましょう。


> string fName = ListBox.Text;
> がエラーにならないのはなぜですか?
ListBox は Control クラスを継承しており、
Text プロパティは継承元の Control クラスで定義されたメンバーです。

継承先のコントロールによって、Text が返す情報は異なりますが、
どんなコントロールであっても Text というプロパティは存在しますので、
それ自体がエラーになることはありません。

ただし一部のコントロールでは、Text プロパティが不可視設定されている
場合もあります。たとえば NumericUpDown や DataGridView などです。
これらでも Text プロパティを呼び出せはしますが、使うべきではありません。
返信 編集キー/


管理者用

- Child Tree -