【问题标题】:Is it possible to fire ComboBox SelectedIndex Changed Event even when old and new index are same?即使新旧索引相同,是否可以触发 ComboBox SelectedIndex Changed Event?
【发布时间】:2013-11-18 17:04:11
【问题描述】:

我有一个场景,即使新旧索引相同,我也需要触发 winform 组合框的 SelectedIndexChanged 事件。我不能使用 SelectionChangeCommited,因为这些值是以编程方式设置的。它不会被解雇。即使旧索引和相同索引相同,是否有机会强制“SelectedIndexChanged”触发?

【问题讨论】:

  • 不确定您为什么要这样做。你能不使用点击事件或失去焦点事件吗?
  • 组合框被禁用,这意味着用户无法手动选择。值正在以编程方式更改。
  • 那么,有什么问题呢?更改这些值后只需手动触发事件,而不关心它是否真的改变了什么。
  • 所以你是说每次向组合框中添加一个值时你想调用一个事件/方法?

标签: c# .net vb.net winforms combobox


【解决方案1】:

您希望为同一项目重新触发该事件似乎很奇怪。这可能是因为您只想重新执行事件处理程序逻辑。为什么不将 SelectionChanged 逻辑提取到一个新方法中并以编程方式调用该方法?

【讨论】:

  • 如果我将SelectionChanged 逻辑提取到一个方法中,我仍然需要触发SelectionChanged 才能调用该方法,不是吗?
  • 我将添加一条注释,以防万一 WinForms 新手认为事件处理程序的逻辑必须完全在处理程序中,因此只能通过引发事件来调用。正如@atomaras 正确指出的那样,将要调用的逻辑放在它自己的方法中。您的事件处理程序可以调用该方法,并且任何也需要此通用逻辑的代码都可以直接调用该方法,而无需使用事件处理程序。这种方法对于避免在各种事件处理程序中重复代码块也很有帮助。
【解决方案2】:

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

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

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

我自己不喜欢在不太严肃的软件中使用标准组件。相反,我从一开始就对所有标准组件进行子类化,并在需要时立即向它们添加功能,而无需更改现有表单中的任何内容。

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

【讨论】:

    【解决方案3】:
    combobox.selectedIndex = value;
    combobox.selectedevent(null,null);
    

    【讨论】:

    • 你能解释一下这段代码吗?它似乎没有回答这个问题。
    • 当需要重新设置当前值到组合框时使用
    • 这两行都不会编译,第一行可以称为错字,但第二行不存在。请编辑您的帖子以解释此代码的作用并修复这些错误。
    • 那我猜你确实没有回答这个问题,因为这不会用 C#/WinForms 或 VB.NET/Winforms(也不是任何其他 .NET Framework 和语言组合)编译,问题是关于。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 2017-02-22
    • 2022-11-29
    • 1970-01-01
    相关资源
    最近更新 更多