ComboBox Items 集合是一个 ObjectCollection,因此您当然可以在其中存储您想要的任何内容,但这意味着您不会像使用 ListViewItem 那样获得 Text 属性。 ComboBox 通过对每个项目调用 ToString() 来显示项目,或者如果设置了 DisplayMember 属性,则使用反射。
我的组合框处于 DropDownList 模式。我遇到一种情况,当用户选择列表中的单个项目时,我想刷新该项目的项目文本。问题是,除了加载时之外,组合框不会在任何时候重新查询文本,而且除了删除和重新添加所选项目之外,我不知道还能如何做我想做的事情,如下所示:
PlantComboBoxItem selectedItem = cboPlants.SelectedItem as PlantComboBoxItem;
// ...
cboPlants.BeginUpdate();
int selectedIndex = cboPlants.SelectedIndex;
cboPlants.Items.RemoveAt(selectedIndex);
cboPlants.Items.Insert(selectedIndex, selectedItem);
cboPlants.SelectedIndex = selectedIndex;
cboPlants.EndUpdate();
这段代码工作正常,除了我的 SelectedIndex 事件最终被触发两次(一次在原始用户事件上,然后当我在此代码中重新设置属性时再次触发)。在这种情况下,事件被触发两次并不是什么大问题,但效率很低,我讨厌这样。我可以设置一个标志,以便它第二次退出事件,但这是黑客行为。
有没有更好的方法让它发挥作用?
一个肮脏的黑客:
typeof(ComboBox).InvokeMember("RefreshItems", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, cboPlants, new object[] { });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)