Как предотвратить сворачивание дочернего окна, когда родительское окно сворачивается - PullRequest
3 голосов
/ 19 декабря 2011

Если я покажу новое немодальное дочернее окно, используя .Show (frmParent), а затем родительское окно будет свернуто, дочернее будет также свернуто автоматически.

Что является лучшим способом предотвращенияthis?

РЕДАКТИРОВАТЬ: дочернее окно должно быть немодальным , и оно должно иметь родительский набор .

Ответы [ 2 ]

6 голосов
/ 19 декабря 2011

Это называется "собственное окно", а не дочернее окно. 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);
    }
}
0 голосов
/ 19 декабря 2011

Если дочернее окно должно вести себя как диалог (вы не можете взаимодействовать с родительским окном, пока оно открыто), тогда вызовите .ShowDialog(frmParent).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...