组合框项不显示,但已设置

本文关键字:设置 显示 组合 | 更新日期: 2023-09-27 18:33:44

我正在用项目更新我的组合框,第一次打开表单时它工作正常,但第二次打开它正在设置值,但它们没有显示。

combo.Items.Clear();
int selectedIndex = -1;
foreach(var item in itemstoadd)
{
    int index = combo.Items.Add(item.Name + " - " + item.Description);
    if (item.Name.Equals(itemToSelect))
    {
        selectedIndex = index;
    }
}
combo.SelectedIndex = selectedIndex;

所以在第二次组合之后。项的计数为 7,所有值均有效。但是,当该方法完成并且窗体重绘时,"项目"列表尚未更新。

环顾了堆栈溢出,找不到任何适合我的东西。

它在正确的线程上,我只能告诉 1 个实例。我试过 BeginUpdate((/EndUpdate((更新((暂停/恢复布局

但仍然没有任何内容会更新此项目显示。

itemtoSelect 被传递到此方法中,这是从另一个组合框事件 selectedindexchange 调用的,最初当我设置显示时。

我已经在代码中达到了调试点,并且这些项目都在第一个窗口打开和第二个窗口打开时设置。我认为唯一不是 100% 确定的是组合框是否是正确的组合框,就像它是第一个窗口打开的旧组合框一样。我想我可以用gethashcode((检查一下,有没有另一种方法可以检查对象的引用以确认它是否是我认为的那个?

组合框项不显示,但已设置

清除Combo.Items时,它会重置 SelectedIndex。然后,当您将赋值combo.SelectedIndex = selectedIndex; 时,它会生成一个新的 SelectedIndexChanged 事件,即使您将其设置为原始值也是如此。如果您尚未完成第一个 SelectedIndexChanged 处理程序调用的执行,这可能会导致问题。

我有一个我没有解除分配的事件,那就是保持原始组合框的活动,并保持我在旧组合框上中断的事件。

一旦我在关闭窗口时取消分配此事件,那么下次我创建窗口和组合框时,一切都很好用。