Overriding ToString () und Hinzufügen zu ListBox C #

8

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.

%Vor%

Ich dachte, das Hinzufügen zu Items würde nur die ToString() meiner Klasse aufrufen. Das Folgende funktioniert natürlich wie erwartet

%Vor%     
Ray Browning 21.04.2011, 12:28
quelle

5 Antworten

7

Damit das funktioniert müssen Sie die Formatierung deaktivieren:

%Vor%

Es sieht so aus, als ob die Formatierung aktiviert ist, es macht einige Zaubertricks und das Ergebnis ist nicht immer das, was es sein sollte ...

    
manji 21.04.2011, 12:51
quelle
4

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%     
Vijay Sirigiri 21.04.2011 12:41
quelle
0

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.

    
Tony The Lion 21.04.2011 12:33
quelle
0

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(); ).

    
Jason Moore 21.04.2011 12:41
quelle
0

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!

    
Wolf5370 30.01.2012 14:55
quelle

Tags und Links