При восстановлении главного окна ранее развернутое дочернее окно больше не разворачивается - PullRequest
0 голосов
/ 16 января 2019

Допустим, у вас есть приложение Windows Forms, у которого есть главное окно с дочерним окном.

Если развернуть главное окно и дочернее окно, а затем свернуть главное окно, дочернее окно также автоматически свернется. Это правильно и ожидаемо.

Если вы затем восстановите главное окно (щелкнув по его значку на панели задач), главное окно будет правильно восстановлено как развернутое, но вторичное окно будет восстановлено как развернутое.

Есть ли способ это исправить? (Это похоже на ошибку WinForms, но, возможно, это из-за замысла ...)

ДЛЯ ВОСПРОИЗВЕДЕНИЯ (требуется два монитора):

  1. Создать новое приложение Windows Forms по умолчанию. Это создаст основную форму с именем Form1.
  2. Выберите Project | Add Windows Form... и нажмите Add, чтобы добавить новую форму с именем Form2.
  3. Измените конструктор Form1, чтобы он выглядел следующим образом:

    public Form1()
    {
        InitializeComponent();
        new Form2().Show(this); // New line of code.
    }
    
  4. Запустите приложение.

  5. Переместите Form1 на один монитор и Form2 на другой монитор.

  6. Разверните форму Form1 и Form2, щелкнув значок максимизации на их заголовках.

  7. Сверните форму Form1, щелкнув значок сворачивания в строке заголовка. Обратите внимание, что Form2 также становится минимизированным.

  8. Восстановите форму Form1, щелкнув ее значок на панели задач.

АКТУАЛЬНЫЙ РЕЗУЛЬТАТ:

Форма 1 восстанавливается до максимального состояния. Form2 не восстанавливается до максимального состояния.

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ:

Обе формы возвращаются в максимизированное состояние.

1 Ответ

0 голосов
/ 16 января 2019

После дальнейших поисков я не смог найти никакого документированного решения для этого, поэтому я нашел свое собственное.Если вы добавите следующий метод и поле к реализации дочерней формы, это исправит проблему:

protected override void OnVisibleChanged(EventArgs e)
{
    base.OnVisibleChanged(e);

    if (!Visible)
    {
        _lastState = WindowState;
    }
    else
    {
        if (_lastState == FormWindowState.Maximized)
            WindowState = FormWindowState.Maximized;
    }
}

FormWindowState _lastState = FormWindowState.Normal;

Однако, если у кого-то есть лучшее исправление, мне будет очень интересно узнать об этом.

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