Две winforms одна модальная диалоговая ситуация - PullRequest
2 голосов
/ 11 ноября 2011

У меня есть две открытые формы win, скажем, что winform1 получает модальное диалоговое окно, это означает, что все формы (winform1 и winform2) будут «отключены». Если мы свернем все формы, а затем выведем winform1, то над ним появится модальное диалоговое окно. Если мы снова свернем все формы, но на этот раз вызовем winform2, будет выглядеть, как finform2 готов к использованию, в то время как он действительно отключен, как winform1.

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

Есть ли что-то встроенное, чтобы справиться с этим, или я сам здесь?

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

В вашем winform2.Activated обработчике событий, вызовите это:

    static void FocusModalForm()
    {
        foreach (Form form in Application.OpenForms)
            if (form.Modal)
            {
                form.WindowState = FormWindowState.Normal;
                form.BringToFront();
            }
    }

например

   Form f2 = new Form();
   f2.Activated += (_, __) => FocusModalForm();
   f2.Show();

Возможно, вам придется сделать то же самое для winform1 Activatedсобытие.Это зависит от того, как создается winform2.Просто попробуйте, и если вы обнаружите, что winform1 (или любая другая немодальная форма) все еще может оказаться перед модальной формой, просто позвоните FocusModalForm() из ее события Activated.

Я пыталсяэто в Windows 7. Я попытался скрыть все окна (нажмите кнопку Показать рабочий стол на панели задач), а затем выбрал form2 непосредственно на панели задач, и я также попытался просто выбрать form2 на панели задач, не скрывая все окна.Form3 всегда оставался на вершине.

0 голосов
/ 12 ноября 2011

Если вы сделаете это:

var winform2 = new Winform2();
winform2.Show(winform1);

Тогда winform2 всегда будет отображаться над winform1, но не будет модальным.Может быть, это может вам помочь.

0 голосов
/ 11 ноября 2011

У меня есть похожее приложение (vb.net), где win1 вызывает win2, а win2 отображает win3, и оно работает так, как вы хотели бы, но выигрыши 2 и 3 являются модальными.Я не знаю, почему это работает или нет.Возможно, это вариант для вас?

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