组合框项目未显示但已设置

时间:2014-12-08 16:19:00

标签: c# .net winforms combobox

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

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,找不到对我有用的任何内容。

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

但仍然没有更新此项目的显示。

itemtoSelect被传递给这个方法,这是从另一个选择了变量的组合框事件中调用的,最初是在我设置显示时。

我在代码中点击调试点,所有项目都在第一个窗口打开和第二个窗口打开时设置。 我认为唯一的想法是我不是100%肯定的是如果组合框是正确的组合框,如果它是从第一个窗口打开的旧组合框。 我想我可以用gethashcode()检查这个是否有另一种检查对象引用的方法来确认它是否是我认为的那个?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我有一个我没有解除分配的事件,那就是让原来的组合框保持活着并保持我在旧组合框上点火的事件。

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