Ответ 1
Нет, вам нужно будет создать свою форму в форме сообщения. класс MessageBox
поддерживает только поведение, аналогичное .ShowDialog()
, которое является модальной операцией.
Просто создайте новую форму, которая принимает параметры и использует их для создания стилизованного окна сообщений по своему вкусу.
Обновление 2014-07-31
В духе поддержания ясности для всех, кто находит это через google, я хотел бы взять секунду, чтобы объяснить это немного больше:
Под капотом MessageBox
является причудливым С# Wrapper вокруг Windows SDK user32.dll MessageBox Function и, таким образом, ведет себя точно так же (после преобразования .NET Enums в целые числа, которые представляют одно и то же в системном вызове.
Это означает, что когда вы вызываете MessageBox.Show()
, вызов маршалируется в ОС и блокирует текущий поток до тех пор, пока не будет выбран параметр или окно не будет убито. Чтобы предотвратить останов вашего кода, вам нужно запустить окно сообщения в отдельном потоке, но это будет означать, что любой результат, который возвращается из окна сообщения ( Да/ Нет/ Ok/ Отмена/Etc...) будет возвращен в отдельный поток, которому было поручено вызвать окно сообщения.
Если вы активируете результат этого окна сообщения, запускаемого таким образом, вам придется отправить результат обратно в поток пользовательского интерфейса для Thread Saftey.
В качестве альтернативы вы можете создать свою собственную форму окна сообщений в WinForms/WPF и вызвать ее с помощью метода .Show()
. Любые события щелчка на кнопках будут выполняться в потоке пользовательского интерфейса, и вам не придется отправлять вызовы обратно в поток пользовательского интерфейса, чтобы манипулировать ими в пользовательском интерфейсе.