Как оставить одно окно поверх всех остальных окон только в моем приложении?

Я хотел бы отобразить окно состояния в моем приложении Windows Forms на C #, которое информирует пользователя, когда приложение ожидает получения блокировки. Это определяется приложением, однако окно должно быть видимым и всегда оставаться поверх всех других окон моего приложения, даже когда пользователь щелкает другое окно (например, большее главное окно позади него).

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

Я знаю свойство Form.TopMost, но оно может выводить и поддерживать только одно окно над всеми остальными, даже окнами из других приложений. Это явно не то, что я ищу.

Я знаю, что это возможно, я много раз видел это раньше в других приложениях. Я просто не знаю, как это можно сделать.


person ygoe    schedule 08.09.2009    source источник
comment
Не связано напрямую, но если вы хотите запустить несколько разных классов форм поверх основного родителя и сохранить исходную временную шкалу открытия событий, тогда вообще опустите свойство владельца. Таким образом, каждое дочернее окно, открытое родителем, останется открытым поверх родительского. Скрывается только при взаимодействии с родительским окном, но остается активным, но теряет фокус при взаимодействии с другими дочерними окнами, открытыми родителем. Непоследовательное использование свойства owner приводит к странному и неустойчивому поведению дочерних окон.   -  person IbrarMumtaz    schedule 30.12.2015


Ответы (2)


Если вы передадите свою основную форму в метод Show формы статуса, он останется поверх основной формы, но не над другими приложениями. Итак, в основной форме вы можете иметь такой код:

StatusForm statusForm = new StatusForm();
statusForm.Show(this);

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

person Fredrik Mörk    schedule 08.09.2009
comment
Также кажется, что он работает с несколькими окнами. (По крайней мере, несколько экземпляров одного и того же класса Form.) Все они остаются перед окном-владельцем. - person ygoe; 09.09.2009

Вы должны установить свойство Owner дочерней формы на родительскую форму и использовать Show для отображения дочерней формы.

person Timbo    schedule 08.09.2009
comment
Спасибо, оба решения работают нормально. К сожалению, я могу отметить как принятое решение только один ответ (но проголосовать за оба). Я также обнаружил, что хорошо установить для свойства ShowInTaskbar принадлежащих окон значение false, чтобы они не испортили панель задач и список окон Alt + Tab. - person ygoe; 09.09.2009