web-dev-qa-db-ja.com

フォームフォーカスを強制する方法?

フォームのフォーカスを強制するにはどうすればよいですか? .Focus()が機能しません。

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

何が悪いのですか?

11
Jack

そのはず

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();
    }
}
10
Sebastian Piu

最初にフォームを表示する必要があります- Show() メソッドを使用します:

_var form = new loginForm();
form.Show();
_

編集:(更新された質問)

既存のフォームが Activate() を呼び出す方が適切な場合があります。これにより、フォームが前面に表示されます。

_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();
    }
}
_

フォームが最小化されている場合は、Activatedイベントをサブスクライブして、ウィンドウの状態を_FormWindowState.Normal_に変更する必要があります。

_private void loginForm_Activated(object sender, EventArgs e)
{
    this.WindowState = FormWindowState.Normal;
}
_
15
BrokenGlass

これを試して:

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

追加するフォームの開始時に
this.BringToFront(); this.Activate();

0
Don Agushi

以前の答えはどれもうまくいきませんでしたが、これはうまくいきました:

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

このイベントの前に呼び出された場合、フォーカスメソッドは機能しませんでした。それが役に立てば幸い。

0
jmonsuarez