タイトルの通りです。
リストボックスに表示されているが選択されていない物の値を取得したいです。どなたかやり方を教えていただけないでしょうか?
C#のFromApplicationを使用しています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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総合スコア9884
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/10 09:04
退会済みユーザー
2020/06/10 14:57
2020/06/11 01:56
退会済みユーザー
2020/06/11 02:03 編集
2020/06/11 03:12
退会済みユーザー
2020/06/11 03:22
2020/06/11 03:34 編集
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総合スコア10505
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。