2017-02-20 17 views
0

Я пытаюсь реализовать «пошаговое руководство» в приложении Windows Forms. Руководства - это просто пошаговые описания способов выполнения общих задач. Я намереваюсь, чтобы пользователи работали с инструкциями при чтении руководств. Поэтому окно, в котором они отображаются, должно быть , доступное при отображении модальных диалогов.Как создать всплывающее окно, которое не зависит от модальных окон (.NET Windows Forms)

Возможно ли это? Если да, то как мне это сделать?

+0

Вы имеете в виду подсказки, которые указывают на соответствующие элементы управления? Да, это возможно; просто создайте окна, принадлежащие рассматриваемому окну. Диалоговое окно с интерфейсом UI - это просто диалоговое окно, которое отключает его владельца, а в коде-модальном диалоге запускается только собственный насос сообщений; прочитайте серию Раймонда Чена по диалогам для получения дополнительной информации. – andlabs

ответ

0

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

Thread myFormThread = new Thread(delegate() 
{ 
    Application.Run(new MyForm()); 
}); 
myFormThread.SetApartmentState(ApartmentState.STA); 
myFormThread.Start(); 

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

0

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

+0

Модальность реализуется путем отключения окна владельца. В потоке может быть любое количество окон, при этом отключается только одно окно, которое владеет модальным диалогом. В систему ничего не встроено, что отключает все окна в потоке. Кроме того, наличие нескольких потоков пользовательского интерфейса вовсе не является сложным, если вы не устанавливаете ни одной иерархии окон между потоками (владелец/владелец или дочерний/родительский). – IInspectable