C#如何通过点击一个button,而文本框有焦点?

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

简单的选项只是将窗体的AcceptButton设置为你想要按下的button(通常是“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 } }); 

通常的做法是将FormAcceptButton设置为你想要“点击”的button。 您可以在VSdevise器或代码中执行此操作,并且可以随时更改AcceptButton

这可能会或可能不适用于您的情况,但是我已经将此与GotFocus事件一起用于表单上的不同TextBox es,以便根据用户按Enter键的位置启用不同的行为。 例如:

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

使用这种方法时需要注意的一点是,当TextBox3变得焦点时,不要将AcceptButton设置为ProcessTextBox1 。 我会build议使用设置AcceptButtonTextBox es上的LostFocus事件,或者创build一个GotFocus方法,使所有不使用特定的AcceptButton调用的控件。

 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事件绑定到文本框,然后当您按下某个键时,该事件将被触发。 在事件内部,我们检查用户是否按下了“回车键”,如果是的话,你可以执行你的操作

我遇到了这个问题,而我自己也在寻找同样的东西,我注意到,当你不想在点击回车时点击表单上的“AcceptButton”时,列出的答案实际上并没有提供一个解决scheme。

一个简单的用例就是屏幕上的一个文本search框,按下回车键应该“点击”searchbutton,而不是执行表单的AcceptButton行为。

这个小片段可以做到这一点。

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

在我的情况下,这个代码是派生自TextBox的自定义UserControl的一部分,并且该控件具有“ClickThisButtonOnEnter”属性。 但以上是一个更一般的解决scheme。

大多数初学者友好的解决scheme是:1.在你的devise师,点击你想要发生的文本字段。 在属性窗口(默认:右下angular)点击雷电(事件)。 该图标位于字母sorting图标和属性图标旁边。

2.向下滚动到keyDown。 点击右边的下拉字段。 你会注意到里面没有任何东西,所以只需按回车。 Visual Studio会为您写下以下代码:

 private void yourNameOfTextbox_KeyDown(object sender, KeyEventArgs e) { } 

3.然后简单地将其粘贴在括号内:

 if (e.KeyCode == Keys.Enter) { yourNameOfButton.PerformClick(); } 

这将会像你点击它一样。

干杯! 菲尔

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

或者你可以使用这个简单的2class轮代码:)

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

将此添加到初始化方法

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

一旦完成捕捉input键,不要忘记相应地切换属性。