如何强制关注子窗体

本文关键字:窗体 何强制 | 更新日期: 2023-09-27 18:18:50

我需要关注一个表单。

I tried in Form2:

//... 
var form3 = new Form3(this);
if (System.Windows.Forms.Application.OpenForms[form3.Name] == null)
{
    form3.Show();
}
else
{
    System.Windows.Forms.Application.OpenForms[form3.Name].Focus();
}

然后在Form3:

public partial class Form3 : Form
{
    public Form2 _emailForm;
    
    public Form3 (Form2 emailForm)
    {
        _emailForm = emailForm;
        InitializeComponent();
    }
    
    public void foo()
    {
        _emailForm.ForceFocus(); 
        this.Close();
    }
}

但是表单永远不会聚焦。有人能指出我做错了什么吗?

如何强制关注子窗体

可以这样简化:

public Form1(Form parent)
{
    InitializeComponent();
    _parent = parent;
}
private void button1_Click(object sender, EventArgs e)
{
    if (_parent != null)
        _parent.Focus();
}
我希望它能回答你的问题。否则请留下评论。

编辑

Show()BringToFront()都在内部使用SafeNativeMethods.ShowWindow(...)。所以你不会注意到任何不同。然而,我认为Form对象上使用Show()Activate(), Control对象上使用BringToFront()更常见,它们是其他Control对象的一部分。

如果你绝对希望用户在使用Form1之前先在Form2中执行操作,请使用。showdialog()而不是。show ()