質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

4回答

3458閲覧

C# リストボックスで選択されていない物すべての値を取得したい

yar

総合スコア16

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2020/06/10 06:00

編集2020/06/10 06:08

タイトルの通りです。

リストボックスに表示されているが選択されていない物の値を取得したいです。どなたかやり方を教えていただけないでしょうか?

C#のFromApplicationを使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2020/06/10 06:09

「選択されていないもの」ですか?「表示されていないもの」ですか? また、「表示されていないもの」だった場合、ListBoxには画面上表示しきれない数の項目があり、実際に表示されている項目以外を取得するということですか?
BluOxy

2020/06/10 06:20

全ては取得できますか。できるのであれば、そのコードを提示してください。
yar

2020/06/10 06:34

@YAmaGNZ 選択されていない物です。質問内容編集しました。 @BluOxy 全ての場合も取得することができないです...
guest

回答4

0

YAmaGNZさんの言っていることをコードにしただけですが^^;

cs

1using System; 2using System.Linq; 3using System.Windows.Forms; 4 5namespace Questions269084 6{ 7 public partial class Form1 : Form 8 { 9 private readonly ListBox listBox; 10 private readonly TextBox textBox; 11 12 public Form1() 13 { 14 InitializeComponent(); 15 16 textBox = new TextBox 17 { 18 Dock = DockStyle.Fill, 19 Multiline = true, 20 }; 21 Controls.Add(textBox); 22 23 listBox = new ListBox 24 { 25 Dock = DockStyle.Left, 26 SelectionMode = SelectionMode.MultiSimple, 27 Width = 50, 28 }; 29 listBox.Items.AddRange(new string[] { "A", "B", "C", "D", "E", "A", "A", }); 30 listBox.SelectedIndexChanged += ListBox_SelectedIndexChanged; 31 Controls.Add(listBox); 32 } 33 34 private void ListBox_SelectedIndexChanged(object sender, EventArgs e) 35 { 36 var text = "選択された\r\n"; 37 foreach(var item in listBox.SelectedItems) 38 { 39 text += item + "\r\n"; 40 } 41 42 text += "選択されていない\r\n"; 43 for(var i = 0; i < listBox.Items.Count; i++) 44 { 45 if(!listBox.GetSelected(i)) 46 { 47 text += listBox.Items[i] + "\r\n"; 48 } 49 } 50 51 textBox.Text = text; 52 } 53 54 // 大体同じ 55 //private void ListBox_SelectedIndexChanged(object sender, EventArgs e) 56 //{ 57 // var text = "選択された\r\n"; 58 // text += string.Join("\r\n", listBox.SelectedItems.Cast<object>()); 59 60 // text += "\r\n選択されていない\r\n"; 61 // var unSelected = listBox.Items.Cast<object>().Where((x, i) => !listBox.GetSelected(i)); 62 // text += string.Join("\r\n", unSelected); 63 64 // textBox.Text = text; 65 //} 66 } 67}

投稿2020/06/10 15:08

編集2023/07/22 07:37
TN8001

総合スコア9396

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1行で済ませるならちょっと長いですが、Linqで取得することができます。

List<string> ret = this.listBox1.Items.Cast<string>().Where(x => !this.listBox1.SelectedItems.Cast<string>().ToList().Any(y => y == x)).ToList();

ただ、慣れないうちはYAmaGNZさんのご提示された方法で実装したほうが
メンテナンスもしやすいかと思います。

投稿2020/06/10 07:15

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2020/06/10 09:04

InvalidOperationExceptionが出ました。 あと同じものが複数入っていた場合が、考慮されていないように思います。
退会済みユーザー

退会済みユーザー

2020/06/10 14:57

同じものがリストボックスに入っているならば、 .Distinct() を最後にかましてあげれば重複はまとめてくれると思います。 例外ですが、私のほうの環境では発生しなかったので、もしご自身で解決できなかったら 別の方の方法のほうがいいかもです。 申し訳ありません。
Zuishin

2020/06/11 01:56

突っ込み所が多すぎて初心者が手本にしてはいけないコードなので低評価を入れておきます。
退会済みユーザー

退会済みユーザー

2020/06/11 02:03 編集

まぁそうでしょうね。 一行で書くとこうですという話なので、突っ込みもなにも。
Zuishin

2020/06/11 03:12

一行で書くことが問題なのではなく、コード自体がお手本にならない低品質なものということです。
退会済みユーザー

退会済みユーザー

2020/06/11 03:22

返信ありがとうございます。 いろんな考え方がありますね。 参考になりました。ありがとうございました。
Zuishin

2020/06/11 03:34 編集

指摘されても自分でわからないようなので、かなり問題がありますね。
guest

0

ベストアンサー

1.LisBoxのアイテム全てでループ
2.ListBox.SelectedItemsの中に含まれるか判断する
3.含まれて居ない場合は選択されていないので、Listや配列に覚えておく

2のListBox.SelectedItemsの中に含まれるか判断するですが、
ListBox.ObjectCollection.Contains(Object) メソッド
を利用すればよろしいかと思います。

ListBox.GetSelected(Int32)メソッドを利用したほうがいいですね。
こちらにあるサンプルで選択状態を反転させることを行っていますので参考になるかと思います。

投稿2020/06/10 06:57

編集2020/06/10 07:13
YAmaGNZ

総合スコア10294

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yar

2020/06/10 07:10 編集

回答ありがとうございます。 選択されていない値を取得してtextBoxに出力させる場合も1~3までの方法で可能でしょうか?
guest

0

リストボックスのItemsプロパティにすべての値が入ってます。
そこから表示されているものをのければいいかと思います

投稿2020/06/10 06:10

y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yar

2020/06/10 06:40 編集

回答ありがとうございます。 選択されているものをのける方法がわからないです...
y_waiwai

2020/06/11 01:50

しつもんがかわっちゃったのね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問