Форму можно использовать, даже если модальное диалоговое окно находится над

У меня есть диалог A, и я хочу, чтобы он загружал второй диалог B, который немодален и остается на стороне A на всем протяжении. Диалог A может затем запустить модальное диалоговое окно C. Но когда присутствует C, я хочу, чтобы B можно было использовать. Я бы исправил это с помощью предварительного перевода сообщения в A в приложении C ++, но каков подход в C #.


person user253966    schedule 23.03.2010    source источник


Ответы (1)


Когда вы запускаете диалог C, запустите его, используя yourFormVariable.Show() вместо yourFormVariable.ShowDialog().

Form form1 = new Form();
Form form2 = new Form();
form1.Show();
form2.Show();

Это позволит обеим формам быть активными и доступными для пользователя, тогда как в следующем коде:

Form form1 = new Form();
Form form2 = new Form();
form1.Show();
form2.ShowDialog();

пользователю придется закрыть form2, прежде чем он сможет снова использовать form1.

Обратите внимание, что не существует такой вещи, как модальный диалог, который позволяет использовать предыдущие формы - модальный диалог по определению - это тот, с которым пользователь должен взаимодействовать и закрыть, прежде чем продолжить.

person Andy Shellam    schedule 23.03.2010
comment
Я знаю, что сделать C немодальным будет работать, но мне нужен другой диалог для ответа, он может иметь текст, который помогает пользователю использовать диалог C. По сути, если мне нужна настраиваемая справочная система, которая является окном приятеля, как это сделать Я позволяю пользователю работать с этим. Я знаю, что Windows использует отдельный процесс для запуска справки и этих мастеров, но я считаю, что не должно быть никаких технических препятствий для того, чтобы сделать это возможным в рамках одного процесса - возможно, путем изменения иерархии владения / происхождения в Windows. - person user253966; 23.03.2010
comment
Итак, вы хотите, чтобы диалоговое окно A не реагировало, когда у пользователя открыто диалоговое окно C, но вы по-прежнему хотите, чтобы он мог взаимодействовать с диалоговым окном B? Как я уже сказал, модальное диалоговое окно будет блокировать все взаимодействие с приложением, пока это модальное диалоговое окно не будет закрыто. Единственный способ сделать это - открыть диалоговое окно C с помощью Show (), затем изменить свойство Enabled диалогового окна A (чтобы оно отключало все элементы управления) при открытии диалогового окна C, а затем снова изменить его на Enabled, когда диалоговое окно C закрыто. - person Andy Shellam; 23.03.2010
comment
Хммм, небольшая проблема - когда диалог C немодален, он может быть потерян при взаимодействии с B - лучший вариант - показать C на панели задач, что не кажется правильным для того, что должно быть модальным диалогом. - person user253966; 23.03.2010
comment
stackoverflow.com/questions/1388408/ это предполагает использование хуков, но решение неясно - person user253966; 23.03.2010
comment
что не кажется правильным для того, что должно быть модальным диалогом - я не согласен. Я видел приложения, в которых модальное диалоговое окно меньше, чем неактивное диалоговое окно позади него, поэтому, если вы щелкнете по этому диалоговому окну, вы потеряете модальное диалоговое окно. Если у вас нет кнопки на панели задач, единственный способ вернуться в модальное окно - это ALT + TAB - мне это не подходит. Панель задач - это первое место, где я ищу окно приложения. - person Andy Shellam; 23.03.2010