当我在PowerShell中创建表单(窗口)时,我通常可以使用.ShowDialog()显示表单:
$form = New-Object System.Windows.Forms.Form
$form.ShowDialog()
.Visible在.ShowDialog()。
之前和之后设置为False但当我做.Show()屏幕上没有显示任何内容时:
$form.Show()
而.Visible现在设置为True(大概是因为.Show()使形式正式显示。)
当我现在再次尝试.ShowDialog()表单时,我收到以下错误消息:
“已经可见的表单不能显示为模式对话框。在调用showDialog之前,将表单的visible属性设置为false。”
但是当我按照指示再次使用.ShowDialog()
时$form.Visible=0
$form.ShowDialog()
结果是屏幕上没有显示任何内容而PowerShell挂起且无法恢复(ctrl-c似乎不起作用)。我认为这是因为表单在某个地方显示模式,我无法看到它(或Tab键到它)。但为什么呢?
表单的坐标没有改变。那么表单如何确定它何时在物理上可见?何时不是?
答案 0 :(得分:6)
避免使用PowerShell中的Show(),因为它需要一个消息泵,这不是PowerShell控制台在创建表单的线程上提供的。 ShowDialog()有效,因为操作系统在此模态调用期间执行消息处理。创建表单并调用ShowDialog()对我来说是可靠的。
答案 1 :(得分:2)
我的问题:当使用ShowDialog()作为PowerShell登录脚本的一部分时,第一个表单窗口将不显示,而PowerShell似乎在登录时冻结。症状与原始帖子相似。
我发现的解决方案:使用:
而不是使用$ form.showDialog() [System.Windows.Forms.Application]::Run($form)
现在对我很有用,只有系列中的第一个表格需要更改。之后在脚本中出现的所有其他表单仍然使用showDialog。