Kann jemand das erklären:
%Vor% Wenn ich dies instanziiere und es zu einem ListBox
-Steuerelement in einem Windows Form
hinzufüge, wird "Collection" statt "My ToString" angezeigt.
Ich dachte, das Hinzufügen zu Items
würde nur die ToString()
meiner Klasse aufrufen. Das Folgende funktioniert natürlich wie erwartet
Setzen Sie das DisplayMember auf der ListBox auf die Eigenschaft des Testtyps.
%Vor%Um Ihr Problem zu lösen, fügen Sie eine Eigenschaft namens "Name" zu Typ und im Getter-Aufruf ToString hinzu.
%Vor%Muss es nicht so sein:
%Vor%Ich nehme an, Sie möchten, dass Ihre Listbox einen String-Typ enthält?
Nicht sicher, ob das richtig ist, ich habe es nicht getestet.
Die Elemente in einer ListBox sind eine Sammlung von Objekten, keine Zeichenfolgen.
Siehe MSDN: ListBox.ObjectCollection.Add-Methode
Daher müssen Sie entweder die Instanz als String (zB: listBox1.Items.Add(test.ToString());
) am Frontend oder im Backend hinzufügen, wenn Sie in der Listbox nach ToString suchen (zB: listBox1.Items[0].ToString();
).
Ich bin auch darauf gestoßen (und ein anderer Dank dort, Manji!). Ich hatte so etwas:
%Vor%Wo MessageText ein Textfeld unter mehreren anderen war, hat es gut funktioniert. Später änderte ich es zu diesem
%Vor%Und es würde immernoch nur den Inhalt des MessageText-Felds zurückgeben (Haarziehzeit). Interessant war, dass ein Kontextmenü auf der ListBox, das ich eingerichtet hatte, um ausgewählte Elemente in die Zwischenablage zu kopieren, die volle ToString-Überschreibung verwendet hatte.
Ich persönlich denke, dass die FormattingEnabled-Eigenschaft standardmäßig auf "false" und nicht auf "true" gesetzt sein sollte. Ich finde, dass ich oft von der IDE (oder den Kontrolleinstellungen) davon überrascht werde, smart zu sein.
/// Edit: Typo (muss daran denken, nicht mit Ellbogen zu tippen!