PerformClick + KeyDown 在 c# 中不起作用,但在 vb 网络中工作正常

PerformClick + KeyDown doesn't work c# but works fine in vb net

我正在尝试将 VB.NET 代码转换为 C#,从我发现此 PerformClick 问题的所有代码中,我不知道发生了什么。

我的VB.Net代码:

Private Sub FormLogin_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    Select Case e.KeyCode
        Case Keys.Enter
            FlBtnLogin.PerformClick()
    End Select
End Sub

代码可以运行,但是当我尝试将其转换为 C# 时,却没有运行。

我的 C# 代码

private void FormLogin_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        FlBtnLogin.PerformClick();
    }
}

事件处理程序

this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.FormLogin_KeyDown);

如有任何帮助和指导,我们将不胜感激,谢谢

根据@John 的最佳选择,如果您想在 KeyPreviewOFF 时将事件置于特定控件中,则这是另一种选择。

此代码仅在窗体处于焦点上时有效,但如果将 focus/cursor 放在其他控件上则无效。

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        MessageBox.Show("Enter!");
    }
}

当焦点位于 TextBox 上时将调用此事件。

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        MessageBox.Show("Enter!");
    }
}

因此您必须在控件上添加事件,您可能会在其中按下 Enter 键,这是密码的文本框。

您需要将表单的 KeyPreview 属性 设置为 true。如果它是默认的 false,那么当可以引发键盘事件的子控件获得焦点时,窗体将不会引发键盘事件。将它设置为 true 并且表单将在子控件之前引发事件。在 C# 和 VB 中都是如此,因此它与您要转换的代码没有任何关系。