Überschreiben von ToString() und hinzufügen von ListBox zu C#
Kann jemand das erklären:
public class Test : List<int>
{
public override string ToString()
{
return "My ToString";
}
}
Wenn ich instanziieren Sie diese und fügen Sie zu einem ListBox
- Steuerelement auf einem Windows Form
es zeigt die "Sammlung" eher als "Meine ToString".
Test test = new Test();
listBox1.Items.Add(test);
Ich dachte, das hinzufügen Items
würde einfach anrufen, meine Klasse ToString()
. Das folgende funktioniert wie erwartet natürlich
MessageBox.Show(test.ToString());
Du musst angemeldet sein, um einen Kommentar abzugeben.
Damit das funktioniert, müssen Sie deaktivieren Formatierung:
Sieht es aus, wenn die Formatierung aktiviert ist, werden Ihr einige Magische tricks und das Ergebnis ist nicht immer das, was es sein sollte...
"DisplayMember" auf das Listenfeld, um die Eigenschaft des Test-Typ.
Um Ihr problem zu lösen, fügen Sie eine Eigenschaft namens ""Namen" zu Geben und in der getter-Aufruf ToString.
Tut es nicht so sein:
Ich nehme an, Sie wollen Ihre listbox enthalten ein string-Typ?
Nicht sicher, ob das richtig ist, aber ich habe es noch nicht getestet.
Elemente in einem ListBox-sind eine Sammlung von Objekten, nicht auf strings.
Sehen MSDN: ListBox.ObjectCollection.Add-Methode
Daher müssen Sie entweder fügen Sie die Instanz als string (z.B.:
listBox1.Items.Add(test.ToString());
) auf dem Frontend oder im backend, wenn man die listbox müssen Sie rufen Sie ToString (ex:listBox1.Items[0].ToString();
).Ich stieß auch dieses (und die anderen Dank gibt es Manji!).
Ich hatte so etwas wie dieses:
Wo die Nachricht war ein text-Feld unter mehreren anderen, und es funktionierte gut. Später änderte ich es zu diesem
Und es würde noch zurück, nur Nachrichtentext Feld Inhalt (Haare ziehen-Zeit). Interessant war, dass ein Kontext-menu auf das Listenfeld hatte ich bis zum kopieren die ausgewählten Elemente in die Zwischenablage, hat die volle ToString überschreiben.
Ich persönlich denke, die FormattingEnabled-Eigenschaft standardmäßig auf false anstatt true, ich finde, ich bekomme oft erwischt, die von der IDE (oder Einstellungen), die versuchen, schlau zu sein.
///Edit: Tippfehler (beachten müssen nicht mit den Ellenbogen!