2016-04-02 19 views
1

私は多くのコンボボックスを持つウィンドウフォームを持っています。彼らはすべて同じアイテムを表示しなければならず、値のリストからアイテムを削除したいと考えています。だから私はリスト変数を作成してそれを削除して値を挿入することにしました。だから私が何をしたか複数のコンボボックスへのバインドリスト

List<string> Ranks = new List<string>(new string[] { "values here" }); 

はその後、私のForm1Designer.csに

this.ComboBox_Rank_0.DataSource = Ranks; 

Iの心臓たValueMemberとDisplayMemberは持っている良いものだったしましたが、今のところそれはそれらなしで動作します。コンパイルすると、フォームがロードされ、コンボボックスが正しい値を持ちます。

問題は、1つのコンボボックスで値を選択すると、他のコンボボックスでも同じ値が選択されるということです。何か案は?

+0

問題はbecaではありません'List 'を使って 'BindingList 'を使っても違いはありません。問題は、コントロールが単一の 'BindingManagerBase'を共有していることを意味するデータソースとして単一のリストを使用することです。ソリューションとして、複数のリスト(バインディングリストまたはyourList.ToListを含む)をデータソースとして使用できます。また、データソースとしてマルチプル 'BindingSource'を使用することもできます。あるいは、コンボボックスに新しい 'BindingContext'を使うこともできます。 –

+0

@RezaAghaei、まあ、えーと... BindingListsを使ったSteveのソリューションはうまくいきました。 – mathgenius

+0

確かに正しく動作し、それは複数の 'BindingList'のためです。ここで重要なことは、この場合、 'List 'と 'BindingList 'の間に違いはないということです。私が言ったことはスティーブの答えに反するものではない。しかし、私は問題の実際の理由を説明し、問題を解決するための3つの選択肢を共有しました。この記事を見て、記事を読んで、ソリューションをテストしてください:[複数のコンボボックスが単一のリストにバインドする - 問題:アイテムを選択すると、すべてのコンボボックスが変わります(http://stackoverflow.com/a/35865838/3110834)。確かに投稿が役に立ちます:) –

答えて

2

BindingList<T>using System.ComponentModel;とそうでないことを通知する必要が

List<string> names = new List<string>() 
     {"Steve", "Mark", "Luke", "John", "Robert"}; 

BindingList<string> bl1 = new BindingList<string>(names); 
ComboBox_Rank_0.DataSource = bl1; 

BindingList<string> bl2 = new BindingList<string>(names); 
ComboBox_Rank_1.DataSource = bl2; 

例えばこのクラスを使用すると、コンボの各

に対して個別にあなたのリストとの対話を処理することができますBindingList<T>
を使用します新しい文字列[]リストのコンストラクタに構文が必要

+0

新しいBindingList (名前)と新しいリスト(名前)を使用することの違いは何ですか? –

+0

ああ、わかりました、これは本当に良い情報です。しかし、私はなぜこのように新しい文字列[]が必要ないのか不思議です。私はそれをコンパイルするとすぐにあなたの答えに正しいフラグを立てます! – mathgenius

+0

'[_オブジェクトとコレクションの初期化子](https://msdn.microsoft.com/en-us/library/bb384062.aspx)について、' List '対' BindingList 'についてはhttp: //stackoverflow.com/questions/2243950/listt-vs-bindinglistt-advantages-disadvantages – Steve

関連する問題