C#如果文本框具有焦点,如何通过按Enter键单击按钮?

64 c# winforms

我在C#中使用WinForm应用程序,在文本框中键入内容后我想按Enter键但文本框仍然有焦点(闪烁光标仍在文本框中),我该如何实现?

Mar*_*ell 80

简单的选项就是将表单的AcceptButton设置为您想要按下的按钮(通常为"OK"等):

    TextBox tb = new TextBox();
    Button btn = new Button { Dock = DockStyle.Bottom };
    btn.Click += delegate { Debug.WriteLine("Submit: " + tb.Text); };
    Application.Run(new Form { AcceptButton = btn, Controls = { tb, btn } });
Run Code Online (Sandbox Code Playgroud)

如果这不是一个选项,你可以查看KeyDown事件等,但这是更多的工作......

    TextBox tb = new TextBox();
    Button btn = new Button { Dock = DockStyle.Bottom };
    btn.Click += delegate { Debug.WriteLine("Submit: " + tb.Text); };
    tb.KeyDown += (sender,args) => {
        if (args.KeyCode == Keys.Return)
        {
            btn.PerformClick();
        }
    };
    Application.Run(new Form { Controls = { tb, btn } });
Run Code Online (Sandbox Code Playgroud)


Jon*_*ton 34

通常的方法是将Form's' 设置为AcceptButton你想要"点击"的按钮.您可以在VS设计器或代码中执行此操作,并且AcceptButton可以随时更改.

这可能适用于您的情况,也可能不适用,但我已将此结合我的表单上的GotFocus不同TextBoxes的事件结合使用,以根据用户点击Enter的位置启用不同的行为.例如:

void TextBox1_GotFocus(object sender, EventArgs e)
{
    this.AcceptButton = ProcessTextBox1;
}

void TextBox2_GotFocus(object sender, EventArgs e)
{
    this.AcceptButton = ProcessTextBox2;
}
Run Code Online (Sandbox Code Playgroud)

使用此方法时要注意的一件事是,在聚焦时不要将AcceptButton设置保留.我建议在设置的es 上使用事件,或者创建一个不使用特定调用的所有控件的方法.ProcessTextBox1TextBox3LostFocusTextBoxAcceptButtonGotFocusAcceptButton


ruv*_*uvi 32

private void textBox_KeyDown(object sender, KeyEventArgs e)
{
     if (e.KeyCode == Keys.Enter)
     {
         button.PerformClick();
         // these last two lines will stop the beep sound
         e.SuppressKeyPress = true;
         e.Handled = true;
     }
}
Run Code Online (Sandbox Code Playgroud)

将此KeyDown事件绑定到文本框,然后当您按下某个键时,将触发此事件.在活动内部,我们检查用户是否按下了"输入密钥",如果是,您可以执行操作

  • 为什么不使用*Accept Button*? (3认同)
  • 我更喜欢这个答案,它是迄今为止最简单的。 (2认同)

RJ *_*han 11

我自己也在寻找相同的东西,但我注意到当你不想在输入时点击表格上的'AcceptButton'时,所列出的答案都没有提供解决方案.

一个简单的用例是屏幕上的文本搜索框,按下Enter键应"单击""搜索"按钮,而不是执行Form的AcceptButton行为.

这个小片段可以解决问题;

private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 13)
    {
        if (!textBox.AcceptsReturn)
        {
            button1.PerformClick();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的例子中,此代码是从TextBox派生的自定义UserControl的一部分,并且该控件具有"ClickThisButtonOnEnter"属性.但以上是一个更通用的解决方案.


phi*_*x_x 5

最适合初学者的解决方案是:

  1. 在您的设计器中,单击您希望发生这种情况的文本字段。在属性窗口(默认:右下角)点击雷电(事件)。此图标位于字母排序图标和属性图标旁边。

  2. 向下滚动到keyDown。单击它右侧的下拉字段。你会注意到里面什么都没有,所以只需按回车键。Visual Studio 将为您编写以下代码:

    private void yourNameOfTextbox_KeyDown(object sender, KeyEventArgs e)
    {
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后只需将其粘贴在括号之间:

    if (e.KeyCode == Keys.Enter)
    {
         yourNameOfButton.PerformClick();
    }
    
    Run Code Online (Sandbox Code Playgroud)

这将像您单击它一样。


小智 5

只需将" 接受按钮 "属性设置为您想要按Enter键的按钮.或者在加载事件写入this.acceptbutton = btnName;