Как предотвратить сворачивание родительского окна при закрытии дочернего окна - PullRequest
0 голосов
/ 14 марта 2020

Добрый день,

Я хотел бы проверить, может ли кто-нибудь помочь мне в решении следующей проблемы, с которой я столкнулся. У меня есть дочерняя форма, отображаемая с помощью ShowDialog(this), и я регистрируюсь на событие Resize, чтобы я мог изменить состояние родителя вместе с дочерним. Проблема в том, что когда родительская форма свернута, дочерняя форма закрывается. Я определил, что вызов WindowState = FormWindowState.Minimized в родительском элементе приводит к тому, что оператор using передает блокирующий вызов ShowDialog(IWin32Window), но я не понимаю, когда минимизируется только дочерний элемент (и родитель не может получить фокус) вызов блокировки не передается. Как мне обойти это поведение? Желательно не держать ссылку на дочернее окно и проверять ее каждый раз, когда изменяется WindowState родителя.

Мой код:

private void StockTakeHistoryMenu_Click(object sender, EventArgs e)
{
    using (StockTakeWindow window = new StockTakeWindow())
    {
        window.Resize += this.ChildStateChanging;
        window.ShowDialog(this);
        window.Resize -= this.ChildStateChanging;
    }
}

private void ChildStateChanging(object sender, EventArgs e)
{
    switch ((sender as Form).WindowState)
    {
        case FormWindowState.Normal:
            this.WindowState = FormWindowState.Normal;
            break;

        case FormWindowState.Minimized:
            this.WindowState = FormWindowState.Minimized;
            break;

        case FormWindowState.Maximized:
            this.WindowState = FormWindowState.Maximized;
            break;
    }
}

Ответы [ 2 ]

2 голосов
/ 14 марта 2020

Вы можете использовать это:

private void ChildStateChanging(object sender, EventArgs e)
{
    this.Show();

    switch ((sender as Form).WindowState)
    {
        case FormWindowState.Normal:
            this.WindowState = FormWindowState.Normal;
            break;

        case FormWindowState.Minimized:
            //this.WindowState = FormWindowState.Minimized;
            this.Hide();
            break;

        case FormWindowState.Maximized:
            this.WindowState = FormWindowState.Maximized;
            break;
    }
}

Я звоню this.Show(); сначала позвоните ChildStateChanging, и я написал this.Hide() вместо this.WindowState = FormWindowState.Minimized;.

0 голосов
/ 14 марта 2020

Похоже, я могу помочь вам с этим, так как в настоящее время я работаю над созданием c# выигрышной формы. Просто опишите это шаг за шагом, я не могу понять, о чем вы спрашиваете. Решение вопроса (как предотвратить сворачивание родительского окна при закрытии дочернего окна) заключается в том, что вам нужно использовать пользовательский элемент управления, а когда вы нажимаете кнопку, расположенную на пользовательском элементе управления, просто кодируйте событие нажатия кнопки, например this.hide (). Это скроет дочерний контроль, а не родительский.

...