使用功能时,无法关闭Powershell中的Form

时间:2015-08-17 01:31:25

标签: forms winforms powershell showdialog

我试图在Powershell中抛出一个无控制窗口,当脚本仍然在执行时,它停留在顶部。一旦剩下的代码完成,我想删除无控制窗口。

除了如何移除窗口本身之外,我已经完成了所有工作。 $ Form.close()不起作用,如果我不得不猜测它,因为它无法在函数中访问$ Form。

所以我不知所措。如何删除窗口?

function goForm
{
Add-Type -AssemblyName System.Windows.Forms
$Label = New-Object System.Windows.Forms.Label
$Label.AutoSize = $True
$Label.Text = "This form is very simple.  
In some cases, it will be larger.

And have spaces.

Like this."
$Form = New-Object System.Windows.Forms.Form
$Form.Text = "Progress"
$Form.SizeGripStyle = "Hide"
$Form.AutoScroll = $True
$Form.AutoSize = $True
$Form.AutoSizeMode = "GrowAndShrink"
$Form.MinimizeBox = $False
$Form.MaximizeBox = $False
$Form.Controlbox = $False
$Form.WindowState = "Normal"
$Font = New-Object System.Drawing.Font("Times New Roman",12,   [System.Drawing.FontStyle]::Regular)
$Form.Font = $Font
$Form.StartPosition = "CenterScreen" 
$Form.Controls.Add($Label)
$Form.Topmost = $True
$Form.Add_Shown({$Form.Activate()})
$Form.ShowDialog()
}

start-job $function:goForm

Start-Sleep -m 5000

$Form.Close()

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$oReturn=[System.Windows.Forms.Messagebox]::Show("The other window should be gone." , "")

1 个答案:

答案 0 :(得分:0)

如果使用Start-Job,则表单将在另一个PowerShell进程中创建,因此您无法在原始PowerShell进程中按变量访问表单。但是,您不需要显示此模式,因此您不需要使用Start-Job。只需使用.Show()代替,例如:

Add-Type -AssemblyName System.Windows.Forms
$Label = New-Object System.Windows.Forms.Label
$Label.AutoSize = $True
$Label.Text = @"
This form is very simple.
In some cases, it will be larger.

And have spaces.

Like this.
"@
$Form = New-Object System.Windows.Forms.Form
$Form.Text = "Progress"
$Form.SizeGripStyle = "Hide"
$Form.AutoScroll = $True
$Form.AutoSize = $True
$Form.AutoSizeMode = "GrowAndShrink"
$Form.MinimizeBox = $False
$Form.MaximizeBox = $False
$Form.Controlbox = $False
$Form.WindowState = "Normal"
$Font = New-Object System.Drawing.Font("Times New Roman",12,   [System.Drawing.FontStyle]::Regular)
$Form.Font = $Font
$Form.StartPosition = "CenterScreen"
$Form.Controls.Add($Label)
$Form.Topmost = $True
$Form.Add_Shown({$Form.Activate()})

$Form.Show()
$Form.Close()