Почему форма, отображаемая PowerShell, иногда не отображается? - PullRequest
4 голосов
/ 03 февраля 2010

Когда я создаю форму (окно) в PowerShell, я обычно могу отображать форму с помощью .ShowDialog ():

$form = New-Object System.Windows.Forms.Form
$form.ShowDialog()

.Visible имеет значение False до и после .ShowDialog ().

Но когда я делаю .Show (), на экране ничего не отображается:

$form.Show()

И .Visible теперь имеет значение True (предположительно потому, что .Show () сделал форму официально видимой.)

Когда я сейчас снова пытаюсь выполнить .ShowDialog () форму, я получаю следующее сообщение об ошибке:

"Форма, которая уже видима, не может быть отображена как модальное диалоговое окно. Установите свойство visible формы в false до вызова showDialog."

Но когда я следую инструкциям .ShowDialog () снова

$form.Visible=0
$form.ShowDialog()

В результате ничего не отображается на экране, а PowerShell зависает и не может восстановиться (ctrl-c не работает). Я предполагаю, что это потому, что форма отображается модально где-то там, где я не вижу ее (или вкладку к ней). Но почему?

Координаты формы не изменились. Так как же форма определяет, когда она физически видима, а когда нет?

Ответы [ 2 ]

6 голосов
/ 03 февраля 2010

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

2 голосов
/ 08 февраля 2013

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

Решение, которое я нашел: вместо использования $ form.showDialog () используйте:

[System.Windows.Forms.Application]::Run($form)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...