Как я могу добавить элемент в ListBox в C # и WinForms? - PullRequest
29 голосов
/ 14 ноября 2009

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

Я пробовал:

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

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

list.Items.add(?)

Btw. Я не могу использовать ListBoxItem по любым причинам.

Ответы [ 9 ]

29 голосов
/ 20 октября 2010

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

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

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

15 голосов
/ 14 ноября 2009
list.Items.add(new ListBoxItem("name", "value"));

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

9 голосов
/ 14 ноября 2009

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

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

8 голосов
/ 14 ноября 2009

Возможно, вы захотите оформить этот SO вопрос:

C # - WinForms - Как правильно загрузить ListBox?

6 голосов
/ 14 ноября 2009

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

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

5 голосов
/ 14 ноября 2009

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

3 голосов
/ 15 января 2018

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

ListBox.Items.Add("some text");
1 голос
/ 14 ноября 2009

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

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

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

listbox1.Items.Add(new { clan = "Foo", sifOsoba = 1234 });
1 голос
/ 14 ноября 2009

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

list.Items.add( new ListBoxItem("clan", "sifOsoba"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...