【问题标题】:ComboBox SelectedIndexChanged not always fired - how do I check when it is?ComboBox SelectedIndexChanged 并不总是被触发 - 我如何检查它什么时候触发?
【发布时间】:2011-04-01 22:20:39
【问题描述】:

我有两个 ComboBoxes(实际上它们是 DevExpress ComboBoxEdits,但我认为在这种情况下行为是相同的),当第一个框的索引更改时,我想为第二个框触发相同的事件,所以它会显示正确的相关数据。

我的问题是,有一半的时间可以完美运行,但有时不会触发第二个事件。代码大致如下:

ComboBox1_SelectedIndexChanged()
{
   ....
   ComboBox2.SelectedIndex = new_index;
}

所以我没有明确触发 ComboBox2_SelectedIndexChanged 事件,而是依赖于更新的 SelectedIndex。 那么为什么不是每次都着火呢?如果我明确设置索引,如果新索引和旧索引相同,那不会触发事件吗?

我发现了这个问题,只是部分相关,但我想根本问题可能是相似的(值并不总是按预期更改?)WinForms ComboBox SelectedIndexChanged not firing when typing few chars followed by Alt+Down

谢谢, 需要对此进行一些说明!

【问题讨论】:

    标签: c# events devexpress


    【解决方案1】:

    我猜原因是因为 Combobox2 的选定索引已经恰好设置为 new_index。我知道你暗示情况并非如此,但我不明白它会如何。

    如果您只想将 combo2 设置为新索引,以便触发 indexChanged 事件,这应该可以让您到达那里,假设组合中至少有两个项目(如果只有一个,那么,真的没有办法无论如何都要改变)

    ComboBox2.SelectedIndex = (ComboBox2.SelectedIndex + 1) % ComboBox2.Items.Count;
    

    或者更好,你为什么不把 indexChanged 事件处理程序的主体,粘贴到一个方法中,然后调用它来代替手动设置 ComBox2 的 selectedIndex。

    【讨论】:

    • 是的 - 当 new_index 已经是索引时,事件不会触发。我认为显式设置索引无论如何都会触发它,但我想它只会在新旧索引不同时触发它,而不是在有更新调用时触发它。
    • 最好的解决办法就是把相关代码放到一个方法中,然后随时调用该方法。手动强制控件引发特定事件可能不是最好的方法。
    猜你喜欢
    • 2010-11-18
    • 2012-10-26
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多