VariableItem的变量组合框

时间:2015-07-06 13:16:34

标签: c# winforms combobox

我用这个循环填充了一个组合框

foreach (Machine.Types machine in machineList)
{
    cbMachineGUI.Items.Add(machine);
}

之后,我希望所选索引是一台特定的机器。

string machineComboBox = SettingsManager.getParameter("MachineType");
cbMachineGUI.SelectedItem = machineComboBox;

参数正确并设置,但组合框的选择项始终没有。

如果我将机器设置在组合框的属性中(而不是通过循环)它可以工作。但我需要组合框可变。

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

问题在于,您放入Items的内容以及您设置SelectedItem的内容是不同的类型。

您正在使用Items个实例填充Machine.Types个集合,并将SelectedItem设置为string个实例。

使用IndexOf和其他答案建议一样没有帮助,因为这不会做任何设置SelectedItem尚未做的事情。它仍然无法在machineComboBox集合中找到Items,就像它现在无法找到它一样。

您需要使用匹配类型,所以一个这些事情(取决于您在组合框中使用值的其他方式):

  1. 在填充集合时将Machine.Types转换为string

    cbMachineGUI.Items.Add(machine.ToString());
    
  2. 在设置machineComboBox时,将Machine.Types转换为与Items中的SelectedItem匹配的实例 - 如何执行此操作取决于{{1}是

  3. 设置Machine.Types

    时,请自行查找正确的项目
    SelectedItem
  4. 无论哪种方式,您都必须在某处这两种类型之间进行转换。

答案 1 :(得分:0)

我建议您找到项目的索引并设置所选索引,而不是设置SelectedItem。

这样的事情:

string machineComboBox = SettingsManager.getParameter("MachineType");
int itemIndex = cbMachineGUI.Items.IndexOf(machineComboBox);
cbMachineGUI.SelectedIndex = itemIndex;

答案 2 :(得分:0)

您可以尝试以下方法:

cbMachineGUI.SelectedIndex = cbMachineGUI.Items.IndexOf("MachineType"); // or whatever you want to select

答案 3 :(得分:0)

您尝试设置的项目可能不会出现在组合框项目列表中,因为您实际上没有选择任何设置为空的内容。要检查项目是否存在,请执行以下操作

string machineComboBox = SettingsManager.getParameter("MachineType");
if(cbMachineGUI.Items.IndexOf(machineComboBox) >= 0)
 cbMachineGUI.SelectedItem = machineComboBox;

从MSDN文档引用:

  

当您尝试将SelectedItem属性设置为对象时,   ComboBox尝试使该对象成为当前选定的对象   列表。如果在列表中找到该对象,它将显示在   ComboBox的编辑部分和SelectedIndex属性设置为   相应的索引。如果列表中不存在该对象,则   SelectedIndex属性保留其当前值.ComboBox类   使用IndexOf方法搜索指定的对象。

查看ComboBox.SelectedItem了解详情。