Ответ 1
list.Items.add(new ListBoxItem("name", "value"));
Внутренняя (по умолчанию) структура данных ListBox - это ListBoxItem.
Мне сложно понять, как добавить элементы в ListBox
в WinForms.
Я пытаюсь:
list.DisplayMember = "clan";
list.ValueMember = sifOsoba;
Как добавить элементы в список со значением int
(ValueMember
) и некоторым текстом (для DisplayMember
)?
list.Items.add(?)
Я не могу использовать ListBoxItem
. Почему?
list.Items.add(new ListBoxItem("name", "value"));
Внутренняя (по умолчанию) структура данных ListBox - это ListBoxItem.
ListBoxItem - это класс WPF, а не класс WinForms.
Для WPF используйте ListBoxItem.
Для WinForms элемент является типом объекта, поэтому используйте один из них:
1. Предоставьте собственный метод ToString() для типа объекта.
2. Используйте привязку данных с DisplayMemeber и ValueMember (см. Ответ Kelsey)
В WinForms ValueMember
и DisplayMember
используются при привязке данных к списку. Если вы не привязываетесь к данным, вы можете добавить любой произвольный объект как ListItem
.
Ловушка заключается в том, что для отображения элемента на него будет вызываться ToString()
. Таким образом, настоятельно рекомендуется добавлять объекты в ListBox, где вызов ToString()
приведет к содержательному выводу.
Возможно, вы захотите проверить этот вопрос SO:
DisplayMember и ValueMember в основном полезны только в том случае, если вы привязываетесь к объектам, которые имеют эти свойства. Затем вам нужно будет добавить экземпляр этого объекта.
например:.
public class MyObject
{
public string clan { get; set; }
public int sifOsoba { get; set; }
public MyObject(string aClan, int aSif0soba)
{
this.clan = aClan;
this.sif0soba = aSif0soba;
}
public override string ToString() { return this.clan; }
}
....
list.Items.Add(new MyObject("hello", 5));
Если вы привязываете его вручную, вы можете использовать пример, предоставленный защитными очками
Как я это делаю - используя формат Event
MyClass c = new MyClass();
listBox1.Items.Add(c);
private void listBox1_Format(object sender, ListControlConvertEventArgs e)
{
if(e.ListItem is MyClass)
{
e.Value = ((MyClass)e.ListItem).ToString();
}
else
{
e.Value = "Unknown item added";
}
}
e.Value является отображаемым текстом
Затем вы можете попытаться отбросить SelectedItem к MyClass, чтобы получить доступ ко всему, что у вас было там.
Также обратите внимание: вы можете использовать что угодно (что наследует от объекта в любом случае (что почти все)) в коллекции элементов.
Вам нужно создать элемент типа ListBoxItem и добавить его в коллекцию Items:
list.Items.add( new ListBoxItem("clan", "sifOsoba"));
Если вы добавляете целые числа, как вы говорите в своем вопросе, это добавит 50 (от 1 до 50):
for (int x = 1; x <= 50; x++)
{
list.Items.Add(x);
}
Вам не нужно устанавливать DisplayMember и ValueMember, если вы не добавляете объекты, у которых есть определенные свойства, которые вы хотите отобразить пользователю. В вашем примере:
listbox1.Items.Add(new { clan = "Foo", sifOsoba = 1234 });
Если вы просто хотите добавить к нему строку, простой ответ:
ListBox.Items.Add("some text");