【问题标题】:Fire Validated Event on WinForms ComboBoxWinForms ComboBox 上的 Fire Validated 事件
【发布时间】:2013-06-05 17:37:04
【问题描述】:

我在组合框的Validated 事件中处理了一些逻辑,但希望它在做出选择后立即触发。我可以单独处理SelectedIndexChanged 事件以触发该事件,但我不确定如何调用它。

Private Sub ComboSelectedIndexChanged(sender As System.Object, e As System.EventArgs) _
    Handles ComboBox1.SelectedIndexChanged
    'Fire Validated Event
End Sub

Private Sub ComboValidated(sender As System.Object, e As System.EventArgs) _
    Handles ComboBox1.Validated
    'Do Something Here
End Sub

我宁愿不直接调用处理已验证事件的方法,

ComboValidated(Nothing, Nothing)

因为这并不是我想要对代码执行的操作,它会第二次运行,而实际上经过验证的事件实际上会在失去焦点时触发。

我可以执行哪些代码来触发已验证的事件(直接触发事件或使控件失去焦点)?

【问题讨论】:

    标签: vb.net winforms events


    【解决方案1】:

    你为什么不把它变成 Sub ..

    Private Sub ComboValidated(sender As System.Object, e As System.EventArgs) _
        Handles ComboBox1.Validated
    
        InCBValidated()
    
    End Sub
    
    Sub InCBValidated()
    
        'Do Something Here
    
    End Sub
    

    所以你只需拨打InCBValidated()

    【讨论】:

    • ComboValidated() 已经是一个子组件,它只是内联了一个处理程序。这与使用空参数调用方法的作用基本相同。我认为调用Validate 事件然后让它触发并执行任何具有该事件侦听器的操作会稍微清楚一些。
    • 我真的很喜欢 OnValidated 方法之类的东西,但它是受保护的,所以我不能直接调用它。
    • 这只是进入 'Do Something Here 的简单方法(可能不太好)
    【解决方案2】:

    我通过使控件失去焦点来解决这个问题,然后触发所有必要的事件。该控件恰好位于一个组合框中,因此移除焦点的最简单方法就是赋予该控件焦点,以便仍然选择页面上的相同位置

    Private Sub ComboSelectedIndexChanged(sender As System.Object, e As System.EventArgs) _
        Handles ComboBox1.SelectedIndexChanged
        If ComboBox1.Focused Then GroupBox1.Focus()
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2010-09-20
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-29
      • 1970-01-01
      相关资源
      最近更新 更多