如何强制表单焦点

本文关键字:焦点 表单 何强制 | 更新日期: 2023-09-27 18:17:23

如何强制窗体焦点?.Focus()不适合我。

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

我做错了什么?

如何强制表单焦点

试试这个:

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

您需要首先显示表单-使用Show()方法:

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

Edit:(更新的问题)

对于调用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;
}

应该是

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

前面的答案都不适合我,但这个可以:

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

在此事件之前调用的聚焦方法都不起作用。

在表单的开头添加
this.BringToFront ();this.Activate ();