我有一个Form,它有一个TextBox和一个Button。我已将表单AcceptButton
属性设置为我的按钮,并将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());
}
}
但是,当TextBox具有焦点时按Enter键,表单的AcceptButton不会被激活。我使用TextBox的KeyDown
事件来处理它,如下所示:
textBox1.KeyDown += (s,e) => { if (e.KeyCode == Keys.Enter) btn.PerformClick(); } ;
虽然它有效但我很好奇为什么使用AcceptButton
属性的早期方法失败了。
答案 0 :(得分:2)
问题是您在实例化之前将表单的AcceptButton
设置为btn
。将this.AcceptButton = this.btn;
移至btn = new Button();
之后的任何行。btn
指向空引用,直至new Button()
。实例化btn
后,您可以使用它来设置AcceptButton
。
答案 1 :(得分:2)
你刚在错误的地方写了一行。那就是答案:
public Form1()
{
InitializeComponent();
this.Size = new Size(200, 200);
textBox1 = new TextBox();
textBox1.Location = new Point(10, 10);
textBox1.Width = 50;
textBox1.AcceptsReturn = true;
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);
this.AcceptButton = this.btn;
}
我希望这可以帮到你!