TextBox未激活表单接受按钮

时间:2016-03-21 22:03:41

标签: c# winforms

我有一个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属性的早期方法失败了。

2 个答案:

答案 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;
    }

我希望这可以帮到你!