C# combobox, in der überschriebenen ToString
Ich bin erleben einige Probleme bei der Arbeit mit ComboBox.
Dem display member für meine combobox ist nicht bevölkert von den überschriebenen ToString - Methode der Klasse ANZEIGEN.
Hier ist mein code:
Form1.cs:
private void Form1_Load(object sender, EventArgs e) {
...
...
MAPList MAP = new MAPList();
comboBox1.DataSource = MAP.All;
comboBox1.ValueMember = "Code";
...
...
}
MAPList.cs:
public class MAPList {
public readonly List<MAP> All;
public MAPList() {
All = new List<MAP>();
var MapData = //Getting map data
foreach(MAP m in MapData) {
All.Add(new Map(m.Name, m.Code));
}
}
}
KARTE.cs:
public class MAP {
public readonly string Name;
private string code;
public string Code { get { return code; } }
public RadioCode(string Name, string Code) {
this.Name = Name;
this.code = Code;
}
public override string ToString() {
return String.Format("{0}: {1}", Name, Code);
}
}
- Was ist die Beziehung? Ich sehe nicht, rufen Sie die Objekt-Karte überall
- Also, was ist die Anzeige statt? Nur "KARTE"?
- Du bist ValueMember Einstellung für die Eigenschaft "Code". Nirgends wird Ihre .ToString überschreiben, get aufgerufen. Statt überschreiben von ToString, nur diesen code ausgesetzt als Instanz-Eigenschaft und eine Bindung zu diesem.
- Tao: Nein. Der Wert für "Code"
- nicht überschriebene ToString-Methode Steuern, was der Benutzer sieht in der combobox??
- genau. Sie sind verbindlich für die Eigenschaft "Code", also es zeigt einen code. Binden einer Eigenschaft zurückgibt String.Format("{0}: {1}", Name, Code); binden Sie einen string-Wert, warum sollte das kompilierte nennen .ToString auf einem string? @Dan Tao die Antwort richtig ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
ToString wird nicht aufgerufen werden, wenn Sie
ValueMember
. Wenn Sie nichtValueMember
es funktioniert wie erwartet, aber dann natürlichCode
wird nicht dazu benutzt werden, den ausgewählten Wert der ComboBox.Alternativ, wenn Sie möchten, verwenden Sie
ValueMember
Sie können auch festlegen möchtenDisplayMember
. Du kannst eine Eigenschaft erstellen, die auf IhreMAP
, die für die Darstellung verwendet wird, d.h.:In der form können Sie dann festlegen
DisplayMember
:Dies ist, weil Sie haben
ValueMember
Eigenschaft "Code", damit die Werte in der combobox sind nicht IhreMap
Objekte, sondern die strings, die dem jeweiligenCode
Eigenschaften.Wenn Sie diese Zeile zu entfernen:
...es wird so funktionieren wie Sie es erwarten.
Wenn Sie möchten, dass die ComboBox zu display seine Elemente nach Ihren
Map
TypToString
Methode, dann Jakob ' s Antwort richtig ist: eine Eigenschaft erstellen, die auf IhreMap
- Typ, liefert einen string, formatiert genau wie Sie es wollen, und legen Sie dieDisplayMember
- Eigenschaft der ComboBox auf den Namen diese Eigenschaft.könnte dies sein, weil u r mit ValueMember. verwenden DisplayMember Eigenschaft, fügen Sie eine weitere Immobilie auf der Karte-Klasse in der dieser Eigenschaft zurückgeben die formatierte Zeichenfolge.
Ich weiß, dies ist eine alte post, aber wenn jemand will ToString() verwenden, ohne eine Immobilie, rufen Sie ToString(), müssen Sie explizit die DisplayMember-Wert eine leere Zeichenfolge wie diese:
Form1.cs:
.ValueMember
vor.DisplayMember
. Ich Tat es falsch und hatte immer noch das problem. Einmal schaltete ich es behoben wurde!