Jack
Jack

Reputation: 16724

How to force the form focus?

How can I force the focus of an form? .Focus() is not working for me.

private void button1_Click(object sender, EventArgs e) {
   var form = new loginForm();
    if (Application.OpenForms[form.Name] == null) {
           form.Show();
    } else {
         form.Focus();
    }
}

What am I doing wrong?

Upvotes: 15

Views: 83790

Answers (5)

jmonsuarez
jmonsuarez

Reputation: 11

None of the previous answers worked for me, but this does:

protected override void OnShown(EventArgs e)
{
    Focus();
}

None of the focusing methods worked if called before this event. Hope it helps.

Upvotes: 1

Don Agushi
Don Agushi

Reputation: 21

On start of the form we add
this.BringToFront(); this.Activate();

Upvotes: 0

Adriano Patricio
Adriano Patricio

Reputation: 191

Try this:

this.BringToFront();
this.Activate();

Upvotes: 19

BrokenGlass
BrokenGlass

Reputation: 160852

You need to show the form first - use the Show() method:

var form = new loginForm();
form.Show();

Edit: (updated question)

For an existing form calling Activate() might be more appropriate, this also brings the form to the front:

private void button1_Click(object sender, EventArgs e) 
{
   var form = new loginForm();
    if (Application.OpenForms[form.Name] == null) 
    {
           form.Show();
    } 
    else 
    {
        Application.OpenForms[form.Name].Activate();
    }
}

If the form is minimized you need to subscribe to the Activated event to change your window state to FormWindowState.Normal:

private void loginForm_Activated(object sender, EventArgs e)
{
    this.WindowState = FormWindowState.Normal;
}

Upvotes: 17

Sebastian Piu
Sebastian Piu

Reputation: 8008

it should be

private void button1_Click(object sender, EventArgs e) {
   var form = new loginForm();
    if (Application.OpenForms[form.Name] == null) {
           form.Show();
    } else {
         Application.OpenForms[form.Name].Focus();
    }
}

Upvotes: 11

Related Questions