我用这个循环填充了一个组合框
foreach (Machine.Types machine in machineList)
{
cbMachineGUI.Items.Add(machine);
}
之后,我希望所选索引是一台特定的机器。
string machineComboBox = SettingsManager.getParameter("MachineType");
cbMachineGUI.SelectedItem = machineComboBox;
参数正确并设置,但组合框的选择项始终没有。
如果我将机器设置在组合框的属性中(而不是通过循环)它可以工作。但我需要组合框可变。
有什么建议吗?
答案 0 :(得分:1)
问题在于,您放入Items
的内容以及您设置SelectedItem
的内容是不同的类型。
您正在使用Items
个实例填充Machine.Types
个集合,并将SelectedItem
设置为string
个实例。
使用IndexOf
和其他答案建议一样没有帮助,因为这不会做任何设置SelectedItem
尚未做的事情。它仍然无法在machineComboBox
集合中找到Items
,就像它现在无法找到它一样。
您需要使用匹配类型,所以一个这些事情(取决于您在组合框中使用值的其他方式):
在填充集合时将Machine.Types
转换为string
:
cbMachineGUI.Items.Add(machine.ToString());
在设置machineComboBox
时,将Machine.Types
转换为与Items
中的SelectedItem
匹配的实例 - 如何执行此操作取决于{{1}是
设置Machine.Types
:
SelectedItem
无论哪种方式,您都必须在某处这两种类型之间进行转换。
答案 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了解详情。