Переопределение ToString () и добавление в ListBox C#
может ли кто-нибудь объяснить это:
public class Test : List<int>
{
public override string ToString()
{
return "My ToString";
}
}
если я создам этот экземпляр и добавлю его в ListBox
управление на Windows Form
, он отображает "Collection", а не"My ToString".
Test test = new Test();
listBox1.Items.Add(test);
Я думал добавить к Items
просто позвоните моему классу ToString()
. Следующие работы, как и ожидалось, конечно
MessageBox.Show(test.ToString());
5 ответов
для этого вам нужно отключить форматирование:
listBox1.FormattingEnabled = false;
похоже, если форматирование включено, оно делает некоторые фокусы, и результат не всегда такой, каким он должен быть...
установите DisplayMember в списке в свойство типа теста.
listBox1.DisplayMember = "Name";
чтобы решить вашу проблему, добавьте свойство с именем "Name" для ввода и вызова getter ToString.
public class Test : List<Int32>
{
public String Name { get { return this.ToString(); } }
public override string ToString()
{
return "Test";
}
}
это не должно быть так:
listBox1.Items.Add(test.ToString());
Я предполагаю, что вы хотите, чтобы ваше listbox содержало строковый тип?
Не уверен, что это правильно, хотя я не тестировал его.
элементы в списке представляют собой набор объектов, а не строк.
посмотреть MSDN: список.ObjectCollection.Метод Add
поэтому вам либо нужно добавить экземпляр в виде строки (например:listBox1.Items.Add(test.ToString());
) на переднем конце или на бэкэнде при просмотре списка вы должны вызвать ToString (например:listBox1.Items[0].ToString();
).
Я тоже наткнулся на это (и еще одно спасибо там Манджи!). У меня было что-то вроде этого:
public override string ToString()
{
return MessageText;
}
где MessageText был текстовым полем среди нескольких других, и он работал нормально. Позже я изменил его на это
public override string ToString()
{
return string.Concat("[", MessageTime.ToString("yyyy-MM-dd HH:mm:ss.fffff"), "] ", MessageText);
}
и он все равно вернет только содержимое поля MessageText (время вытягивания волос). Интересно, что контекстное меню в списке, который я настроил для копирования выбранных элементов в буфер обмена, использовало полное переопределение ToString.
лично я думаю, что свойство FormattingEnabled должно по умолчанию иметь значение false, а не true, я нахожу, что я часто ловлю IDE (или настройки управления), пытаясь быть умным.
/ / / Edit: опечатка (необходимо помнить, чтобы не вводить с локтями!