2015-04-19 2 views
-2

В конструкторе я сделал:Как получить текст элементов ComboBox каждого элемента?

ComboboxItem item1 = new ComboboxItem(); 
item1.Text = "Processor"; 
item1.Value = "Win32_Processor"; 
ComboboxItem item2 = new ComboboxItem(); 
item2.Text = "DiskDrive"; 
item2.Value = "Win32_DiskDrive"; 
cmbxOption.Items.Add(item1); 
cmbxOption.Items.Add(item2); 

ComboboxItem[] items = new ComboboxItem[cmbxOption.Items.Count]; 

for (int i = 0; i < items.Length; i++) 
{ 
    items[i] = new ComboboxItem(); 
    items[i].Text = cmbxOption.GetItemText(i); 
} 

Но вместо того, чтобы делать новый экземпляр для каждого элемента и добавить товар в cmbxOption Я хочу, чтобы сделать цикл, который добавит все элементы из cmbxOption в ComboboxItem[] ,

В конструкторе form1 в ComboBox в пункты собственности у меня уже есть элементы в коллекции:

Win32_1394Controller 
Win32_1394ControllerDevice 
Win32_BaseBoard 
Win32_Battery 
Win32_BIOS 
Win32_Bus 
Win32_CDROMDrive 
Win32_CIMLogicalDeviceCIMDataFile 
Win32_DeviceBus 
Win32_DeviceMemoryAddress 
Win32_DeviceSettings 
Win32_DisplayConfiguration 
Win32_DisplayControllerConfiguration 
Win32_DMAChannel 
Win32_DriverVXD 
Win32_FloppyController 
Win32_FloppyDrive 
Win32_HeatPipe 
Win32_IDEController 
Win32_IDEControllerDevice 
Win32_InfraredDevice 
Win32_IRQResource 
Win32_Keyboard 
Win32_MotherboardDevice 
Win32_OnBoardDevice 
Win32_PCMCIAController 
Win32_PNPAllocatedResource 
Win32_PnPDevice 
Win32_PnPEntity 
Win32_PointingDevice 
Win32_PortableBattery 
Win32_PortConnector 
Win32_PortResource 
Win32_POTSModem 
Win32_POTSModemToSerialPort 
Win32_PowerManagementEvent 
Win32_Printer 
Win32_PrinterConfiguration 
Win32_PrinterController 
Win32_PrinterDriverDll 
Win32_PrinterSetting 
Win32_PrinterShare 
Win32_PrintJob 
Win32_Processor 
Win32_SCSIController 
Win32_SCSIControllerDevice 
Win32_SerialPort 
Win32_SerialPortConfiguration 
Win32_SerialPortSetting 
Win32_SMBIOSMemory 
Win32_SoundDevice 
Win32_TemperatureProbe 
Win32_USBController 
Win32_USBControllerDevice 
Win32_VideoConfiguration 
Win32_VideoController 
Win32_VideoSettings 
Win32_VoltageProbe 

Я хочу взять каждый элемент и создать для него ComboboxItem Text и Value. Просто не делать это вручную.

Это класс я сделал:

public class ComboboxItem 
     { 
      public string Text { get; set; } 
      public object Value { get; set; } 

      public override string ToString() 
      { 
       return Text; 
      } 
     } 

А потом это, как я использую его, когда выберите пункт:

private void cmbxOption_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      InsertInfo((cmbxOption.SelectedItem as ComboboxItem).Value.ToString(), ref lstDisplayHardware, chkHardware.Checked); 
     } 

Это работает, когда я делаю это руководство в конструктор, добавляющий каждый раз новый элемент в текст и значение cmbxOption, но вместо этого добавляя каждое руководство по элементам, я хочу использовать элементы, которые у меня уже есть в cmbxOption.

+0

Как вы планируете получать значение, когда в компонентах ComboBox есть только текст? И что случилось с существующим кодом? – IllidanS4

+0

IllidanS4 я еще не добавил строку значения внутри цикла. Сначала я проверил текст. Проблема в этом коде заключается в том, что я получаю как Text число 0 вместо получения cmbxOption.GetItemText (i) Текст, который я получаю, равен 0, так как i = 0 в первый раз. Но то, что я хочу получить, является Item Text/Name, например, первый элемент text/name - это Win32_1394Controller, но я получаю 0. –

+0

IllidanS4 я добавил недостающий код, я забыл добавить класс, который я использую, и выбранное событие, и объяснил, что я хочу делать. –

ответ

0

GetItemText просто возвращает текстовое представление объекта, а не текст элемента в индексе. Попробуйте следующее:

using System.Linq; 

ComboboxItem[] items = cmbxOption.Items.Cast<string>().Select(s => new ComboboxItem{Value = s, Text = s.Substring(6)}).ToArray(); 
+0

Я получаю исключение на этой строке invalidcastexception: Невозможно наложить объект типа «ComboboxItem» на тип «System.String» –

+0

@Barbari Я думал, что combobox полон строк (вы сказали, что сделали это в дизайнере). Какие типы объектов содержатся в выпадающем списке? – IllidanS4

+0

Комбобокс в дизайнере - это коллекция предметов, которые уже полны предметов, и они являются строками. Когда я нажимаю конструктора в коллекции свойств элементов, я вижу внутри многих строк, как я показываю в своем вопросе все Win32 .... и он говорит: введите строки в коллекции (по одной в строке). –

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