2009-09-08 3 views
3

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

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

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

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

+0

Непосредственно, но если вы хотите запустить несколько разных классов форм поверх основного родителя и сохранить исходную временную шкалу событий, то полностью опустите свойство владельца. Таким образом, каждое дочернее окно, открытое родителем, останется открытым поверх родителя. Только скрытый при взаимодействии с родительским окном, но будет оставаться включенным, но потерян фокус при взаимодействии с другими дочерними окнами, открытыми родителем. Непосредственное использование свойства владельца приводит к странному и неустойчивому поведению в дочерних окнах. – IbrarMumtaz

ответ

9

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

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

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

+0

Он также работает с несколькими окнами. (По крайней мере, несколько экземпляров одного и того же класса Form.) Все они остаются перед окном владельца. – ygoe

4

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

+0

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

Смежные вопросы