即使旧的和新的索引相同,是否可能触发ComboBox SelectedIndex Changed事件?

10

我有一个场景,其中需要在winform的组合框中触发SelectedIndexChanged事件,即使旧索引和新索引相同。我不能使用SelectionChangeCommited,因为值是通过编程方式设置的,并且它不会被触发。是否有任何方法可以强制“SelectedIndexChanged”在旧索引与新索引相同时触发?


不确定为什么您想这样做。您不能使用单击事件或失去焦点事件吗? - ViSu
组合框被禁用,这意味着用户无法手动进行选择。值是通过程序进行更改的。 - SamuraiJack
1
那么,问题是什么呢?在更改这些值后,只需手动触发事件,不必关心它是否真的改变了什么。 - Jannik
那么您是想说每次向下拉列表框中添加一个值时都要调用一个事件/方法吗? - ViSu
3个回答

28

你想让相同的项目重新触发事件似乎有点奇怪。这可能是因为你只想重新执行事件处理程序逻辑。为什么不将SelectionChanged逻辑提取到一个新方法中,并以编程方式调用它呢?


如果我将“SelectionChanged”逻辑提取到一个方法中,我仍然需要触发“SelectionChanged”才能调用该方法,是吗? - SamuraiJack
我要添加一条注释,以防有人新手WinForms认为事件处理程序的逻辑必须完全在处理程序内部,因此只能通过引发事件来调用。正如@atomaras所述,将要调用的逻辑放在自己的方法中。您的事件处理程序可以调用该方法,并且任何需要此公共逻辑的代码都可以直接调用该方法,而无需使用事件处理程序。这种方法还非常有助于避免在各种事件处理程序中重复代码块。 - Goal Man

18

没有什么阻止你直接调用事件处理程序:

comboBox1_SelectedIndexChanged(comboBox1, new EventArgs()); // or (null, null)

但是atomaras的解决方案是更好(更好看)的方法。

我个人不喜欢在比较严肃的软件中使用标准组件。相反,我从一开始就派生所有标准组件,并在需要添加功能时将其添加到组件中,而无需更改现有表单中的任何内容。

在这种情况下,我会添加一个公共事件触发器OnSelectedIndexChanged来执行事件(以编程方式运行事件处理程序中的代码)。


-2
combobox.selectedIndex = value;
combobox.selectedevent(null,null);

你能解释一下这段代码吗?它似乎并没有回答问题。 - nvoigt
当需要将当前值重新设置到组合框中时使用。 - Rahul Sahu
两行代码都无法通过编译,第一行可以称为打字错误,但第二行根本不存在。请编辑您的帖子以解释此代码的作用并修复这些错误。 - nvoigt
1
那么我猜你确实没有回答这个问题,因为这段代码无法在C#/WinForms或VB.NET/Winforms(以及任何其他.NET框架和语言组合)中编译通过,而这正是该问题所涉及的。 - nvoigt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接