我有一个窗体,其中有一个文本框和一个按钮。我已经将Form的AcceptButton
属性设置为Button,并将TextBox的AcceptsReturn
属性设置为false
:
class Window : Form
{
private TextBox textBox1;
private Button btn;
public Window()
{
this.Size = new Size(200, 200);
this.AcceptButton = this.btn;
textBox1 = new TextBox();
textBox1.Location = new Point(10, 10);
textBox1.Width = 50;
textBox1.AcceptsReturn = false;
this.Controls.Add(textBox1);
btn = new Button();
btn.Text = "Test";
btn.Location = new Point(textBox1.Right + 10, 10);
btn.Click += btn_Click;
this.Controls.Add(btn);
}
void btn_Click(object sender, EventArgs e)
{
MessageBox.Show("Works");
}
}
class Program
{
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.Run(new Window());
}
}
但是,当文本框处于焦点状态时按Enter键时,窗体的AcceptButton不会被激活。我使用TextBox的
KeyDown
事件来解决它,如下所示:textBox1.KeyDown += (s,e) => { if (e.KeyCode == Keys.Enter) btn.PerformClick(); } ;
并且尽管它起作用了,但我很好奇为什么使用
AcceptButton
属性的早期方法失败了。 最佳答案
问题是您在实例化窗体之前将窗体的AcceptButton
设置为btn
。在this.AcceptButton = this.btn;
之后将btn = new Button();
移动到任何行。btn
指向空引用,直到new Button()
。实例化btn
后,可以使用它来设置AcceptButton
。