【问题标题】:Keyup event fires automaticallyKeyup 事件自动触发
【发布时间】:2013-02-23 11:56:32
【问题描述】:

在我的 Visual Studio 2010 的 winforms 应用程序中,

我有一个按钮和两个组合框(combobox1,combobox2)。

我在按钮中添加了代码来清除第一个组合框(combobox1)中先前输入的数据并设置焦点。

在第一个组合框(combobox1)的 keyup 事件中,我检查了输入键,如果按下,焦点将移动到下一个组合框(combobox2)。

但我的问题是,当我按下按钮时(通过在焦点位于按钮上时按下回车键),焦点直接移动到最后一个(第二个)组合框(combobox2)。

combobox1 的 Keyup 事件会自动触发,尽管我只在按钮上输入了

我该如何解决这个问题?

下面是我的代码

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    'code to perform database action
    Me.ComboBox1.Focus()
End Sub

Private Sub ComboBox1_KeyUp(sender As Object, e As KeyEventArgs) Handles ComboBox1.KeyUp
    If e.KeyCode = Keys.Enter Then
        If Me.ComboBox1.SelectedText = String.Empty Then
            ComboBox2.Focus()
        End If
    End If
End Sub

更新

当我点击按钮时,问题不会出现 但是,当我在焦点位于按钮上时按 Enter 键,触发按钮单击事件时,就会出现问题。

【问题讨论】:

    标签: vb.net winforms combobox


    【解决方案1】:

    解决此问题的最简单方法是将 ComboBox1 更改为 KeyDown 处理程序,而不是按键。

    它发生的原因是事件的顺序:

    • 按下按钮(回车键)
    • 代码运行 (Button2_Click),焦点移至 ComboBox1
    • ComboBox1 上的 Key Up 触发
    • 代码运行 (ComboFox1_KeyUp),焦点移至 ComboBox2

    编辑: 更冗长的解释:您在button1 上按下回车键,这会导致它的 OnKeyDown 处理程序运行。当您释放回车键时,焦点在Combobox1,因此它的 OnKeyUp 处理程序运行。

    【讨论】:

    • 谢谢,它成功了。但是你能详细解释一下为什么会出现这个问题吗?
    • @HemalRathod:我以为我有,但我已经为你添加了一个更冗长的解释。
    猜你喜欢
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 2023-03-19
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多