你能指出我如何在Powershell中设置一个最顶层的窗口?我用了这段代码:
$form.TopMost = $True
这种方法几乎完美无缺。我遇到的问题是有两个最顶层的窗口,由于某种原因,我的表单有时会被隐藏,应该始终位于顶部。
答案 0 :(得分:1)
这是从此网页上获取的:
https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/keeping-msgbox-on-top
从PowerShell打开MsgBox对话框时,对话框窗口有时可能不可见,而是显示在PowerShell或ISE窗口后面。
要确保MsgBox对话框出现在PowerShell窗口的前面,请尝试以下操作:
Add-Type -AssemblyName Microsoft.VisualBasic
[Microsoft.VisualBasic.Interaction]::MsgBox('My message', 'YesNo,MsgBoxSetForeground,Information', 'MyTitle')
键是选项MsgBoxSetForeground
。如果您想知道可以选择哪些其他选项,请将第二个参数替换为废话,错误消息将列出所有其他选项名称。
一个是SystemModal
。如果使用该名称而不是MsgBoxSetForeground
,则MsgBox不仅会显示在前面,还会停留在该位置。在用户单击其按钮之一之前,没有其他窗口可以与对话框重叠。
SystemModal
是将其设置为所有窗口中最重要的一位。
因此使用:
Add-Type -AssemblyName Microsoft.VisualBasic
[Microsoft.VisualBasic.Interaction]::MsgBox('My message', 'YesNo,SystemModal,Information', 'MyTitle')
这是来自以下目录的目录选择器:
https://powershellone.wordpress.com/2016/05/06/powershell-tricks-open-a-dialog-as-topmost-window/
Add-Type -AssemblyName System.Windows.Forms
$FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
$FolderBrowser.Description = 'Select the folder containing the data'
$result = $FolderBrowser.ShowDialog((New-Object System.Windows.Forms.Form -Property @{TopMost = $true }))
if ($result -eq [Windows.Forms.DialogResult]::OK){
$FolderBrowser.SelectedPath
}
else {
exit
}
答案 1 :(得分:-3)
如果您的主要最顶层表单要覆盖第一个表单中的最顶层设置(请调用您的辅助表单),然后将以下内容添加到您的"主要"形式
[void][reflection.assembly]::loadwithpartialname("System.Windows.Forms")
# Form settings
$formPrimary = New-Object System.Windows.Forms.Form
$formPrimary.Text = "Primary Form"
$formPrimary.StartPosition = 4
$formPrimary.ClientSize = "200,200"
$formPrimary.Topmost = $True
$formSecondary.Topmost = $False
$formPrimary.ShowDialog()
这应该将您的辅助表单设置回其正常状态,并允许您的主表单采取最高位置。这只是在理论上,因为我不熟悉在同一时间打开多个窗体,因为powershell只创建模态对话框,因此我无法测试此解决方案。