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 } });
通常的做法是将Form
的AcceptButton
设置为你想要“点击”的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议使用设置AcceptButton
的TextBox
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(); } };
将此添加到初始化方法
你可以把它关在keyup事件上http://www.itjungles.com/dotnet/c-how-to-easily-detect-enter-key-in-textbox-and-execute-a-method
这对WinForms非常有效。 但是,在WPF中,您需要以不同的方式做事,而且这很容易。 将与此文本区域相关的Button的IsDefault属性设置为true。
一旦完成捕捉input键,不要忘记相应地切换属性。