创建没有变量的GUI表单



我正试图找到一种方法,在PowerShell中创建表单,而不使用任何变量,除非它们是临时或虚拟分配的。我希望能够运行类似于以下的命令:

(New-Object System.Windows.Forms.Form).ShowDialog()

在这里,我可以在创建表单后触发的事件中输入代码。然后,该事件将负责创建表单中的所有对象和其他事件。一旦表单启动,我就不需要接受任何变量来代替事件中实际分配的变量。

这是为了避免为表单中的每个对象分配过多的系统资源和无尽的变量。我目前在PowerShell中使用的脚本很可能会非常大,即使它不是一个非常大的脚本,效率和干净的代码始终是编写好程序或脚本的关键。

add-type -ass System.Windows.Forms
$x = (New-Object System.Windows.Forms.Form)
$x.Text = 'Message Box'
$x.Size = '300,150'
$x.Font = $x.Font.Name + ',12'
$x.Controls.Add((New-Object System.Windows.Forms.Label))
$x.Controls[-1].Size = $x.Size
$x.Controls[-1].Text = 'Here is a message for you'
$x.ShowDialog()
Remove-Variable x

当您用一个变量定义每个对象时,仍然可以使用完全相同的访问方式访问这些对象。我花了很多小时的研究,只是简单地尝试随机命令来找出如何做到这一点。如果你对我的解决方案感兴趣,以下是你可能需要重新学习的所有命令:

# create item in form:
$x.Controls.Add((New-Object System.Windows.Forms.Button))
# access the last created item in the form:
$x.Controls[-1]
# change it's name to identify it easier
$x.Controls[-1].Name = 'button1'
# access the item by it's new name:
$x.Controls['button']
# delete the item by it's name:
$x.Controls.Remove($x.Controls['button1'])

如果你熟悉PowerShell中的表单创建,那么这一切对你来说都应该有意义,你应该熟悉它的其余部分是如何工作的。此外,对于那些对我尝试做的事情感兴趣的人,需要注意的另一点是,通过用$this替换$x,可以在事件中完成这些命令中的任何一个。如果它在窗体的"controls"部分中的对象的事件中,那么您将使用$this.parent

这正是我所说的能够创建一个几乎没有变量的表单的意思。我遇到的唯一问题是,我不确定如何分配事件并同时调用方法ShowDialog()

我发现了一个非常有趣的解决方案,但我不确定这个解决方案的限制是什么,而且它并没有以我个人希望的方式工作。

文件.ps1:

add-type -ass System.Windows.Forms
$x = (New-Object System.Windows.Forms.Form)
$x.Text = 'Message Box'
$x.Size = '300,150'
$x.Font = $x.Font.Name + ',12'
$x.Controls.Add((New-Object System.Windows.Forms.Label))
$x.Controls[-1].Size = $x.Size
$x.Controls[-1].Text = 'Here is a message for you'
$x
remove-variable x

执行代码的命令:

(iex(Get-Content 'file.ps1'|out-string)).ShowDialog()

最新更新