2013-03-12 2 views
-1

У меня есть combobox say combobox1. У меня есть 4 элемента. Всякий раз, когда я выбираю элемент, я хочу получить выделенный текст в combobox1 в тексте ярлыка. Я попытался сделать это, используя следующий код, но он не работает.выбор элементов из combobox для текста меток

cnt относится к количеству элементов в combobox1. lb является объектом метки.

Пожалуйста, помогите ..

for (int i = 1; i <= cnt; i++) 
{ 
    lb.Text = comboBox1.Items[i].ToString(); 
} 
+0

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' – Habib

+0

Это также зависит от того, какие объекты вы вставляете. Объект как элемент в списке должен иметь метод ToString(). Но вы не увидите никакого текста в combobox вообще для элементов, если базовый тип объекта не реализует 'ToString()'. Но почему вы за цикл и присваиваете значения (переписываете предыдущее значение) в label.text? Это не имеет никакого смысла. –

+0

@ Хабиб: выход не то, что я ожидаю. Ошибок нет. Но он ничего не возвращает в тексте меток – user

ответ

1

Несколько вещей неправы с кодом:

  1. Индексы основаны на нуле (по крайней мере, на C#). Значение для цикла for должно начинаться с 0 и НЕ на 1.
  2. Вы переписываете значение Text в своей метке с каждой итерацией в цикле for, что не имеет смысла. Используйте Debug.Print (System.Diagnostics namespace) вместо этого, чтобы просмотреть все значения элементов combobox.
  3. Вы должны использовать событие, которое, когда выбран элемент в поле со списком, обновляется значение метки, см. Этот URL-адрес для списка событий для combobox: http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.aspx. Либо присоедините обработчик к событию в коде, либо выполните его в графическом дизайнере Visual Studio. Обычно вы хотите использовать событие SelectedIndexChanged: http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectedindexchanged.aspx
  4. Убедитесь, что элементы в вашем поле со списком имеют тип объекта, который реализует ToString(). В противном случае ничего не будет показано в вашем поле со списком.
  5. Ваш текущий цикл for хочет выполнить lb.Text = comboBox1.Items[comboBox1.Items.Count].ToString(); в последней итерации цикла for. В результате получится IndexOutOfRangeException: http://msdn.microsoft.com/en-us/library/system.indexoutofrangeexception.aspx
2

как о

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      lb.Text = comboBox1.Text; 
     } 
+0

Нет, это не сработает. он возвращает system.data ... – user

+0

'.Text' работает, попробуйте :) – Pyromancer

+0

Он отображает System.Data.Data в тексте метки – user

0

Попробуйте следующий код:

for (int i = 0; i < cmbTest.items.count; i++) 
{ 
    label1.text = cmbTest.SelectedItem[i].toString(); 

} 
    //Or 
    label1.text = cmbTest.Text; 

    //Or 
    label1.text = cmbTest.selectedValue; 
+0

Повторное назначение значений в свойство Text метки в цикле for без использования ранее назначенных значений - безумие. Вы могли бы использовать 'label1.text = cmbTest.SelectedItem [cmbTest.items.count-1] .toString();' вместо этого с тем же результатом и меньшим использованием ЦП. –

+0

Спасибо Майку за ценную информацию. – Freelancer

Смежные вопросы