我在使用一些 PS GUI 功能时遇到问题。
我已经尝试了很多东西并且一直在到处寻找(所有链接都是紫色的!)。
我的表单上有一个取消按钮,现在当用户单击取消按钮时,它指向这个处理程序,我的表单将关闭。
$handler_cancelButton_Click={
$MainForm.Close()
}
但是,一旦表单关闭,我的脚本的所有其余部分都会尝试继续运行(FTP、运行 Excel、发送电子邮件等)并引发错误。
我尝试了很多不同的东西,我只运行了Exit
命令并关闭了我的表单,引发了错误,并关闭了我的整个 IDE (PowerGUI)。
现在我也尝试过这样的事情:
[environment]::exit(0)
[System.Windows.Forms.Application]::Exit($null)
两者都会做调用Exit
会做的事情。关闭我的表单和 PowerGUI。
我想要发生的是当用户按下取消,我的表单关闭,我的脚本的其余部分停止或终止。
编辑
现在,一旦我有了 GUI.ps1 和 Code.ps1。我想我会在 Code.ps1 中调用 GUI.ps1,获取我需要的用户输入到变量中。然后获取这些变量并将它们从 GUI.ps1 传递给 Code.ps1(我需要该信息才能在此处运行任何东西)。
然后,一旦我在 Code.ps1 中获得了这些值,就运行我正在做的所有其他事情..?
但是现在如果我的用户出于某种原因决定只点击取消按钮......
(老实说,可能不会发生很多事情,我更想让这个功能为学习而工作。他们可能会不小心运行脚本,不知何故..)
...它只会关闭 GUI,但 Code.ps1 的其余部分不会仍然运行吗?
或者现在我可以在我的 Code.ps1 脚本中说这样的话:
if($someGUIValue -eq $null -and $someOtherGUIValues - eq $null){
Exit #would I be able to run this now the way I think it would?
}
else{
#yes, run the script..
}
* *找到答案
编辑..
我所做的是我创建了一个标志。在我的任何脚本开始之前,我声明了一个像这样的变量
$terminateScript = $false
在我的事件处理程序中,我添加了这个
$handler_cancelButton_Click={
$terminateScript = $true
$MainForm.Close()
return $terminateScript
}
一旦他们点击取消按钮,它将设置$terminateScript = $true
。所以现在我在调用我所有的函数时有这样的东西:
$username, $password, $someOtherValue, $anotherVaklue, $terminateScript = MainForm
if($terminateScript -eq $false){
SomeFunction
AnotherFunction
}
else{
Exit #this now works here, and cancels my script, without closing my IDE.
}
谢谢您的帮助