2016-04-02 21 views
1

Ich habe eine Windows-Form mit vielen Comboboxen. Sie müssen alle dieselben Objekte anzeigen und ich möchte Objekte aus ihrer Werteliste entfernen können. Also habe ich beschlossen, eine List-Variable zu erstellen, damit ich einfach Werte daraus entfernen und einfügen kann. Also, was ich tat, warBindungsliste zu mehreren ComboBoxen

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

Da ist in meinem Form1Designer.cs

this.ComboBox_Rank_0.DataSource = Ranks; 

I Herz und Valuemember Display waren gute Dinge zu haben, aber bisher funktioniert es ohne sie. Beim Kompilieren lädt das Formular und die Comboboxen haben die korrekten Werte.

Das Problem ist, dass die anderen, wenn ich einen Wert in einer Combobox auswählen, den gleichen Wert auch ausgewählt. Irgendwelche Ideen?

+0

Das Problem ist nicht Beca Die Verwendung von 'List ' und die Verwendung von BindingList 'macht keinen Unterschied. Das Problem besteht darin, eine einzelne Liste als Datenquelle zu verwenden, was bedeutet, dass die Steuerelemente eine einzige "BindingManagerBase" teilen. Als Lösung können Sie mehrere Listen (einschließlich Bindungsliste oder yourList.ToList) als Datenquelle verwenden. Oder Sie können die mulpleple 'BindingSource' als Datenquelle verwenden. Oder Sie können den neuen BindingContext für Kombinationsfelder verwenden. –

+0

@RezaAghaei, naja, uh ... Steves Lösung, BindingLists zu verwenden, funktionierte gut. – mathgenius

+0

Sicher funktioniert es richtig und es ist wegen der multiple 'BindingList'. Wie gesagt, das Wichtigste ist hier: In diesem Fall gibt es keinen Unterschied zwischen 'List ' und 'BindingList '. Und was ich gesagt habe, ist nicht gegen die Antwort des Steve. Aber ich habe beschrieben, was der eigentliche Grund für das Problem ist, und ich habe 3 Optionen geteilt, um das Problem zu lösen. Werfen Sie einen Blick auf diesen Beitrag, lesen Sie den Beitrag und testen Sie die Lösungen: [Mehrere ComboBox-Bindungen an eine einzelne Liste - Problem: Wenn ich ein Element auswähle, ändern sich alle Kombinationsfelder] (http://stackoverflow.com/a/35865838/3110834). Sicherlich finden Sie den Beitrag hilfreich :) –

Antwort

2

Verwenden Sie eine BindingList<T>
Diese Klasse ermöglicht es Ihnen, die Interaktion mit Ihrer Liste separat für jede der Kombinationen

Zum Beispiel

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; 

Die BindingList<T> erfordert using System.ComponentModel; und Hinweise zu behandeln, die Sie nicht tun Erfordert die neue Zeichenfolge [] Syntax im Konstruktor Ihrer Liste

+0

Was ist der Unterschied zwischen der Verwendung neuer BindingList (Namen) und neue Liste (Namen)? –

+0

Oh, ich verstehe, das ist wirklich eine gute Information. Aber ich bin auch neugierig, warum es auf diese Weise keine "neue Saite []" braucht. Ich werde deine Antwort korrekt kennzeichnen, sobald ich es kompilieren kann! – mathgenius

+0

Über die _new string [] _ ​​[Objekt- und Auflistungsinitialisierer] (https://msdn.microsoft.com/en-us/library/bb384062.aspx), über 'List ' versus 'BindingList ' siehe: http: //stackoverflow.com/questions/2243950/listt-vs-bindinglistt-advantages-dispatables – Steve

Verwandte Themen