Shadow
Shadow

Reputation: 4006

TextBox not activating Form accept button

I have a Form which has a TextBox and a Button. I have set the Form's AcceptButton property to my Button, and set the TextBox's AcceptsReturn property to 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());
    }
}

However, when pressing the Enter key while the TextBox has focus, the AcceptButton of the Form is not activated. I worked around it using the KeyDown event of the TextBox like so:

textBox1.KeyDown += (s,e) => { if (e.KeyCode == Keys.Enter) btn.PerformClick(); } ;

And although it works I am curious as to why the earlier method using the AcceptButton property failed.

Upvotes: 1

Views: 597

Answers (2)

Raniere Silva
Raniere Silva

Reputation: 21

You just wrote one line in the wrong place.That's the answer:

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

I hope this helps you!

Upvotes: 2

Tom
Tom

Reputation: 2390

The problem is that you set the Form's AcceptButton to btn before you instantiate it. Move this.AcceptButton = this.btn; to any line AFTER btn = new Button();.. btn is pointing to a null reference up until new Button(). Once you instantiate btn you can use it to set AcceptButton.

Upvotes: 2

Related Questions