父窗口最小化时如何防止子窗口的最小化

Jir*_*iri 3 .net c# vb.net windows winforms

如果我使用.Show(frmParent)显示一个新的非模态子窗口,然后父窗口最小化,子窗口也将自动最小化.

防止这种情况的最佳方法是什么?

编辑:子窗口必须是非模态的,并且必须具有父集.

Han*_*ant 6

它被称为"拥有窗口",而不是子窗口.Windows确保拥有的窗口始终位于其所有者之上.这意味着它具有当所有者最小化到最小化.

但Winforms确实支持动态更改所有者.此示例代码运行良好:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
    }
    private Form ownedWindow;

    private void button1_Click(object sender, EventArgs e) {
        if (ownedWindow != null) return;
        ownedWindow = new Form2();
        ownedWindow.FormClosed += delegate { ownedWindow = null; };
        ownedWindow.Show(this);
    }

    protected override void WndProc(ref Message m) {
        // Trap the minimize and restore commands
        if (m.Msg == 0x0112 && ownedWindow != null) {
            if (m.WParam.ToInt32() == 0xf020) ownedWindow.Owner = null;
            if (m.WParam.ToInt32() == 0xf120) {
                ownedWindow.Owner = this;
                ownedWindow.WindowState = FormWindowState.Normal;
            }
        }
        base.WndProc(ref m);
    }
}
Run Code Online (Sandbox Code Playgroud)