检测Enter键C#

12
我有下面这段代码,但按下回车键时不会显示MessageBox。
对于任何其他按键(即字母/数字),MessageBox则会显示False。
private void cbServer_TextChanged(object sender, EventArgs e)
{
    if (enterPressed)
    {
        MessageBox.Show("Enter pressed");
    }
    else
        MessageBox.Show("False");
}

private void cbServer_Keydown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return)
    {
        enterPressed = true;
        MessageBox.Show("Enter presssed: " + enterPressed);

    }
    else
        enterPressed = false;
}

有什么想法吗?

编辑:以上代码,我认为问题出在_Keydown事件上,所以我只发布了那部分。


6
消息框如何显示错误信息?我没有看到它。 - Cole Tobin
你尝试过进行调试吗?你应该使用OEMReturn或者它的别名。 - Cole Tobin
cbServer是什么类型的控件?是下拉框吗?这是一个WPF还是WinForms应用程序? - Steve
事件处理程序附加到哪个控件?cbServer吗?尝试将其附加到窗体上。 - jle
4个回答

12

在您的表单设计器类(formname.designer.cs)中添加以下代码:

this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Login_KeyPress);

并将此代码添加到backbone代码(formname.cs)中:

void Login_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)13)
            MessageBox.Show("ENTER has been pressed!");
        else if (e.KeyChar == (char)27)
            this.Close();
    }

它还可以处理Escape键来关闭您的表单,我认为这可能会很有用。 - Maziar Aboualizadehbehbahani
这是在 designer.cs 文件中已经存在的代码:this.cbServer.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.cbServer_KeyPress); - k1f1
抱歉,我看到它使用的是Keypress而不是KeyDown。我会尝试使用那个,谢谢。 - k1f1
1
如果你想让代码看起来更加美观,可以这样写:if (e.KeyChar == (char)Keys.Enter)。 - Rob

7
这是因为当你按下Enter键时,TextChanged事件不会被触发。

0
private void textBox_PreviewKeyDown(object sender, KeyEventArgs e)
 {
            if (e.Key == Key.Enter)
            {
                MessageBox.Show("Enter key pressed");
            }
            else if (e.Key == Key.Space)
            {
                MessageBox.Show("Space key pressed");
            }
}

使用PreviewKeyDown事件来检测任何在文本框或输入框中显示之前按下的键。

在PreviewKeyDown中无法找到“e.Key”选项。 - Budapest

0
void cbServer_PreviewKeyDown(object sender, System.Windows.Forms.PreviewKeyDownEventArgs e)
    {

        // Check if User Presses Enter
        if (e.KeyCode == System.Windows.Forms.Keys.Return)
        {
            // Here: user pressed ENTER key

        }
        else
        {
            // Here: user did not press ENTER key
        }
    }

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