在任何文本框中按下Enter键时要单击的按钮

问题描述

我有一个看起来像这样的面板:

picture of the panel

用户在此处单击更新时可以编辑数据库

我想让它能够在用户按下Enter键时起作用。

所以我可以对每个文本框的KeyUp事件使用以下代码

 private void textBox1_KeyDown(object sender,KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            button1_Click(this,new EventArgs());
            //Added this so there is no sound when Enter is pressed.
            e.SuppressKeyPress = true;
        }
    }

我的问题是,是否可以不必为每个文本框事件分别添加代码而这样做?我可以将一些文本框事件分组吗?

解决方法

您将button1(请给它起一个更好的名字)作为表格的AcceptButton

//in constructor,after InitializeComponent
this.AcceptButton = button1;

请注意,如果当前焦点集中的控件由于某种原因而使用了返回键(按钮使用了返回键并单击了它们,多行文本框使用了返回键并开始了新的编辑行),则您的button1 不会被点击

您还可以将相同的事件处理程序代码附加到多个事件/在多个控件上,因此您可以使用一种方法:

void AnyTextbox_KeyPress(...){ 
  if( it's the return key ) 
    ...
}

以及您可以在设计器中进行的任何按键操作(同样在构造函数中):

nameTextbox.KeyPress += AnyTextbox_KeyPress;
ageTextbox.KeyPress += AnyTextbox_KeyPress;
addressTextbox.KeyPress += AnyTextbox_KeyPress;

然后在任何这些文本框中按一个键将触发该事件处理程序以及也连接到该框的KeyPress的任何其他事件处理程序

将事件视为方法列表,就像事件列表一样,当事件发生时,C#将起作用,并通过列表调用每个方法。如果您为100个使用+ =的事件附加了100个不同的处理程序,则它们都将被称为

请注意,不应依赖它们触发的顺序。不要在依赖于首先运行的另一个事件处理程序中的代码的事件处理程序中编写代码。较晚添加的事件处理程序不一定会在较早添加的事件处理程序之后触发

,

您只需为以下代码创建一个函数,然后在所有点击事件中调用该函数

 private void textBox1_KeyDown(object sender,KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            button1_Click(this,new EventArgs());
            //Added this so there is no sound when Enter is pressed.
            e.SuppressKeyPress = true;
        }
    }

例如textBox1_KeyDown(sender,e)在您要呼叫的任何地方。