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

时间:2008-11-18 15:36:40

标签: c# winforms

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

12 个答案:

答案 0 :(得分:79)

简单的选项就是将表单的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 } });

如果这不是一个选项,你可以查看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 } });

答案 1 :(得分:32)

通常的做法是将Form的{​​{1}}设置为您想要“点击”的按钮。您可以在VS设计器或代码中执行此操作,并且AcceptButton可以随时更改。

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

TextBox

使用此方法时要注意的一件事是,当void TextBox1_GotFocus(object sender, EventArgs e) { this.AcceptButton = ProcessTextBox1; } void TextBox2_GotFocus(object sender, EventArgs e) { this.AcceptButton = ProcessTextBox2; } 成为焦点时,您不会将AcceptButton设置为ProcessTextBox1。我建议使用设置TextBox3的{​​{1}} es上的LostFocus事件,或者创建一个TextBox方法,使所有不使用特定控件的控件AcceptButton致电。

答案 2 :(得分: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;
     }
}

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

答案 3 :(得分:11)

我遇到了这个问题,同时也在寻找同样的事情,我注意到当你不想在输入时点击表格上的'AcceptButton'时,所列出的答案都没有提供解决方案。

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

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

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

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

答案 4 :(得分:5)

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

答案 5 :(得分:3)

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

  1. 在Designer中,单击要发生此操作的文本字段。 在属性窗口(默认:右下角)单击thunderbolt(事件)。此图标位于字母排序图标和属性图标旁边。

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

    private void yourNameOfTextbox_KeyDown(object sender, KeyEventArgs e)
    {
    
    }
    
  3. 然后只需将其粘贴在括号中:

    if (e.KeyCode == Keys.Enter)
    {
         yourNameOfButton.PerformClick();
    }
    
  4. 这将按照你点击它的方式行事。

答案 6 :(得分:2)

在Visual Studio 2017中,使用c#,只需在您的按钮中添加AcceptButton属性,在我的示例中&#34; btnLogIn&#34;:

this.btnLogIn = new System.Windows.Forms.Button();
//....other settings
this.AcceptButton = this.btnLogIn;

答案 7 :(得分:1)

将此添加到Form的构造函数中:

this.textboxName.KeyDown += (sender, args) => {
    if (args.KeyCode == Keys.Return)
    {
        buttonName.PerformClick();
    }
};

答案 8 :(得分:1)

或者您可以使用这个简单的2班码:)

if (e.KeyCode == Keys.Enter)
            button1.PerformClick();

答案 9 :(得分:0)

答案 10 :(得分:0)

这对WinForms非常有效。但是,在WPF中,你需要以不同的方式做事,而且更容易。 将与此文本区域相关的按钮 IsDefault 属性设置为true。

完成捕获回车键后,请不要忘记相应地切换属性。

答案 11 :(得分:0)

在我的情况下,TextBox根本没有收到Enter键。我尝试做的第一件事是将Enter键更改为输入键,但是按Enter键时我仍然听到系统提示音。因此,我继承并覆盖了ProcessDialogKey()方法,并发送了自己的事件,可以将点击处理程序绑定到该事件。

public class EnterTextBox : TextBox
{
    [Browsable(true), EditorBrowsable]
    public event EventHandler EnterKeyPressed;

    protected override bool ProcessDialogKey(Keys keyData)
    {
        if (keyData == Keys.Enter)
        {
            EnterKeyPressed?.Invoke(this, EventArgs.Empty);
            return true;
        }
        return base.ProcessDialogKey(keyData);
    }
}