如何强制表格焦点?

时间:2011-12-11 00:25:24

标签: c# .net winforms focus

如何强制表格的焦点? .Focus()对我不起作用。

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

我做错了什么?

5 个答案:

答案 0 :(得分:15)

您需要先显示表单 - 使用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;
}

答案 1 :(得分:10)

试试这个:

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

答案 2 :(得分:8)

应该是

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

答案 3 :(得分:0)

在表格的开头,我们添加
this.BringToFront(); this.Activate();

答案 4 :(得分:0)

以前的答案都没有对我有用,但确实如此:

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

如果在此事件之前被调用,则所有聚焦方法都无效。希望对您有所帮助。