Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 创建没有变量的GUI表单_Forms_User Interface_Powershell - Fatal编程技术网

Forms 创建没有变量的GUI表单

Forms 创建没有变量的GUI表单,forms,user-interface,powershell,Forms,User Interface,Powershell,我试图找到一种方法,在PowerShell中创建表单,而不使用任何变量,除非它们是临时或虚拟分配的。我希望能够运行与以下类似的命令: (New-Object System.Windows.Forms.Form).ShowDialog() 在其中,我可以在创建表单后触发的事件中输入代码。然后,该事件将负责创建表单中的所有对象和其他事件。一旦表单启动,我将不需要任何变量来接受事件中实际分配的变量 这是为了避免为表单中的每个对象分配过多的系统资源和无尽的变量。我目前在PowerShell中编写的脚本

我试图找到一种方法,在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中的表单创建,那么这一切对您来说都是有意义的,并且您应该熟悉它的其余部分是如何工作的。另外,对于那些对我正在尝试做的事情感兴趣的人来说,另一个要注意的是,这些命令中的任何一个都可以在事件中通过将
$x
替换为
$this
来完成。如果它位于表单“控件”部分内对象的事件中,则使用
$this.parent


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

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

file.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()

您是否考虑过尝试使用C#Winforms,您所做的基本上都是为了您。您可以进行拖放GUI设计,VisualStudio为您制作表单设计器文件。您甚至可以使用system.management.automation库在C#中调用PowerShell并将表单值全部传递给它。