gpt4 book ai didi

c# - 如何就地刷新组合框项目?

转载 作者:太空狗 更新时间:2023-10-29 22:13:16 26 4
gpt4 key购买 nike

ComboBox Items 集合是一个 ObjectCollection,因此您当然可以在其中存储任何您想要的内容,但这意味着您不会像使用 ListViewItem 那样获得 Text 属性。 ComboBox 通过对每个项目调用 ToString() 或使用反射(如果设置了 DisplayMember 属性)来显示项目。

我的 ComboBox 处于 DropDownList 模式。我有一种情况,当用户选择列表中的单个项目时,我想刷新它的项目文本。问题是 ComboBox 除了加载时不会在任何时候重新查询文本,而且除了删除和重新添加所选项目之外,我无法弄清楚如何做我想做的事情,如下所示:


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[] { });

关于c# - 如何就地刷新组合框项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1440244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com