所以我有一个脚本,试图在其中创建文本菜单的GUI版本。我目前可以从文本菜单中选择启动GUI菜单。我希望有一个按钮返回到文本菜单,但是使窗体上的关闭按钮(“ x”)完全退出脚本。
我以为我可以使用Form.Close()
关闭GUI,然后再调用文本菜单变量,但这会导致PowerShell会话崩溃。
这是我提到的嵌套在Add_Click
脚本块中的代码:
$Text_Menu.Add_Click({
$MainMenu_GUI.Close()
.$MainMenu
})
我希望这将关闭GUI并返回到文本菜单,但结果却更具灾难性……任何人都知道为什么,或者也许我能完成我所描述的期望结果?任何建议都非常感谢!
答案 0 :(得分:0)
Close可能有特殊含义,通常由Dispose方法调用。隐藏或隐藏可能是您所追求的,但是我需要mvce才能确定。
try {
$Text_Menu = # MISSING CODE THAT CREATES SOME OBJECT
# Source example https://www.business.com/articles/powershell-interactive-menu/
$Text_Menu.Add_Click({ return })
} finally {
$MainMenu_GUI.Dispose()
}
答案 1 :(得分:0)
当表单显示为模式对话框时,单击“关闭”按钮(该表单右上角带有X的按钮)将导致该表单被隐藏,并且DialogResult属性被设置为DialogResult。取消。与非模式形式不同,当用户单击对话框的关闭表单按钮或设置DialogResult属性的值时,.NET Framework不会调用Close方法。而是隐藏该窗体,并且可以在不创建对话框的新实例的情况下再次显示该窗体。因为显示为对话框的表单是隐藏的而不是关闭的,所以当应用程序不再需要该表单时,必须调用该表单的Dispose方法。
不将窗体放置在“关闭”上的两个条件是:(1)它是多文档界面(MDI)应用程序的一部分,并且该窗体不可见; (2)您已使用ShowDialog显示了表单。在这些情况下,您将需要手动调用Dispose来标记表单的所有控件以进行垃圾收集。
如果使用Show方法显示表单,将自动调用Dispose。如果使用了ShowDialog之类的其他方法,或者根本没有显示该窗体,则必须在应用程序中调用Dispose。
来自Form.Dispose(Boolean) Method
但是:
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Size = New-Object System.Drawing.Size(150,150)
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Point(10,10)
$Button.Size = New-Object System.Drawing.Size(50,50)
$Button.Text = "Close"
$Button.add_click({$form.close()})
$form.Controls.Add($Button)
$form.ShowDialog()
对我来说很好...
问题必须在$MainMenu