【问题标题】:combobox items not displaying but are set组合框项目未显示但已设置
【发布时间】:2014-12-08 16:18:59
【问题描述】:

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

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;

所以在第二次之后,combo.Items 的计数为 7,并且所有值都有效。 但是当方法完成并重新绘制表单时,项目列表尚未更新。

我查看了 stackoverflow,找不到任何适合我的东西。

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

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

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

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

【问题讨论】:

  • 哪种方法“完成”?您只显示一小段代码。这段代码是什么方法?你的 foreach 有一个错字
  • 你已经检查过你在第一次之后进入了foreach
  • 我检查了 gethashcode,它是我显示的组合框上的不同代码,我的断点触发并具有正确的值,所以我认为我正在编辑旧组合框,即不再可见。

标签: c# .net winforms combobox


【解决方案1】:

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

【讨论】:

  • 对不起,也许我没有解释清楚,但我列出的组合框事件是从不同的组合框调用的,所以这不会发生。
【解决方案2】:

我有一个未解除分配的事件,它使原始组合框保持活动状态并保持我在旧组合框上触发断点的事件。

一旦我在关闭窗口时释放了这个事件,那么下次我创建窗口和组合框时,一切都会很好。

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    相关资源
    最近更新 更多