Подтвердить что ты не робот

Как я могу добавить элемент в ListBox?

Мне сложно понять, как добавить элементы в ListBox в WinForms.

Я пытаюсь:

list.DisplayMember = "clan";
list.ValueMember = sifOsoba;

Как добавить элементы в список со значением int (ValueMember) и некоторым текстом (для DisplayMember)?

list.Items.add(?)

Я не могу использовать ListBoxItem. Почему?

4b9b3361

Ответ 1

list.Items.add(new ListBoxItem("name", "value"));

Внутренняя (по умолчанию) структура данных ListBox - это ListBoxItem.

Ответ 2

ListBoxItem - это класс WPF, а не класс WinForms.

Для WPF используйте ListBoxItem.

Для WinForms элемент является типом объекта, поэтому используйте один из них:
1. Предоставьте собственный метод ToString() для типа объекта.
2. Используйте привязку данных с DisplayMemeber и ValueMember (см. Ответ Kelsey)

Ответ 3

В WinForms ValueMember и DisplayMember используются при привязке данных к списку. Если вы не привязываетесь к данным, вы можете добавить любой произвольный объект как ListItem.

Ловушка заключается в том, что для отображения элемента на него будет вызываться ToString(). Таким образом, настоятельно рекомендуется добавлять объекты в ListBox, где вызов ToString() приведет к содержательному выводу.

Ответ 5

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

Если вы привязываете его вручную, вы можете использовать пример, предоставленный защитными очками

Ответ 6

Как я это делаю - используя формат 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, чтобы получить доступ ко всему, что у вас было там.
Также обратите внимание: вы можете использовать что угодно (что наследует от объекта в любом случае (что почти все)) в коллекции элементов.

Ответ 7

Вам нужно создать элемент типа ListBoxItem и добавить его в коллекцию Items:

list.Items.add( new ListBoxItem("clan", "sifOsoba"));

Ответ 8

Если вы добавляете целые числа, как вы говорите в своем вопросе, это добавит 50 (от 1 до 50):

for (int x = 1; x <= 50; x++)
{
   list.Items.Add(x);
}

Вам не нужно устанавливать DisplayMember и ValueMember, если вы не добавляете объекты, у которых есть определенные свойства, которые вы хотите отобразить пользователю. В вашем примере:

listbox1.Items.Add(new { clan = "Foo", sifOsoba = 1234 });

Ответ 9

Если вы просто хотите добавить к нему строку, простой ответ:

ListBox.Items.Add("some text");