2010-02-03 38 views
4

當我在創建PowerShell中形式(窗口),我通常可以使用顯示.ShowDialog()的形式:()爲什麼PowerShell顯示的表單有時不顯示?

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

。可見被.ShowDialog之前和之後設置爲False。

但是當我做了.Show()沒有顯示在屏幕上:(大概是因爲.Show()所做的形式正式可見)

$form.Show() 

而且。可見現在設置爲True

當我現在嘗試.ShowDialog()的形式再次,我收到以下錯誤信息:

「形式,是早已不能顯示爲模式對話框可見之前設置窗體的Visible屬性設置爲false調用showDialog「。

但是,當我按照說明.ShowDialog()再次

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

的結果是,沒有任何顯示在屏幕上和PowerShell掛起,並且無法恢復(CTRL-C似乎不工作) 。我認爲這是因爲窗體被模態顯示在某處我看不到它(或製表符)的地方。但爲什麼?

表單的座標沒有改變。那麼,表單如何決定它何時可見,什麼時候不可見?

+0

這一點(!)有點晚了,但我張貼供將來參考[可能的解決方案(http://stackoverflow.com/questions/19312354/powershell-unable-to-interact-with-form-stored-in-一個淨組件/ 19314687#19314687)。 – 2013-10-11 09:32:08

回答

6

避免使用PowerShell中的Show(),因爲它需要消息泵,並且PowerShell控制檯不是在創建窗體的線程上提供的。 ShowDialog()可以工作,因爲在這種模式調用期間操作系統會執行消息抽取。創建窗體並調用ShowDialog()對我來說工作可靠。

+0

有用的知識,但沒有回答我的所有問題。 :-( – 2010-02-05 11:21:23

+1

也許沒有答案。 – 2010-02-10 10:53:31

+1

在我的機器,調用展()(或設置可見= 1),在第一時間將導致表單出現非常簡要,然後消失。在那之後,還呼籲包括的ShowDialog()不會導致它在所有出現。我懷疑這是由於缺乏消息抽水。如果你避免調用展()並設置Visible屬性,然後ShowDialog的(),效果很好。 – 2010-02-10 17:38:50

2

我的問題:當使用ShowDialog的()作爲一個PowerShell登錄腳本的一部分,第一種形式的窗口不會顯示和PowerShell似乎凍結在登錄。症狀與原始帖子相似。

解決方案,我發現:除了使用$ form.showDialog(),使用範圍:

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

對我的作品很大,現在,只有在該系列中的第一種形式需要改變。之後在腳本中出現的所有其他表單仍然使用showDialog。

+0

這是否允許返回結果? – 2013-10-11 15:18:26