【问题标题】:Need help regarding creating dynamic forms in powershell需要有关在 PowerShell 中创建动态表单的帮助
【发布时间】:2012-12-01 13:04:09
【问题描述】:

嗨,我正在尝试在 pwoershell 中创建一个动态表单,这是一个有 5 个按钮(颜色名称)的表单,每个按钮打开一个不同的文本文件(例如,如果单击红色按钮,它应该打开 red.txt ; 这是完整的代码;

脚本开始

$var = "Red","Blue","Yellow","Black","White"


$testForm = New-Object System.Windows.Forms.Form
$testForm.Text = "Color List"
$testForm.AutoSize = $True
$testForm.AutoSizeMode = "GrowAndShrink"     

$Font = New-Object System.Drawing.Font("Times New Roman",24, [System.Drawing.FontStyle]::Bold)   
$testForm.Font = $Font


$Label = New-Object System.Windows.Forms.Label
$Label.Text = "Select the Color"
$Label.AutoSize = $True
$testForm.Controls.Add($Label)


$x=100
$y=50
foreach($color in $var)
{
    $run = New-Object System.Windows.Forms.Button
    $run.Location = New-Object System.Drawing.Size($x,$y)
    $run.Size = New-Object System.Drawing.Size(100,50)
    $run.Text = "$Color"
    $run.Add_Click({ Invoke-Expression "notepad C:\Users\User\$color.txt" })
    $testForm.Controls.Add($run)
    $Font = New-Object System.Drawing.Font("Times New Roman",14,[System.Drawing.FontStyle]::Regular)
    $run.font = $Font
    $run.AutoSize = $True
    $y+=50

}
$testForm.ShowDialog()

结束脚本

一切都很顺利,直到当表单打开按钮时,点击所有按钮,打开文件“White.txt”,因为它是数组中的最后一个元素;有没有办法改变脚本,让每个按钮只打开它们各自的文件,而不是最后一个颜色文件?

如果需要任何进一步的问题或说明,请告诉我。

【问题讨论】:

    标签: winforms user-interface powershell


    【解决方案1】:

    看起来问题出在 Add_Click 行。脚本块包含一个指向变量 $color 的链接,而不是立即评估它以为 Invoke-Expression 创建一个新的“记事本...”字符串并链接到它。单击按钮时将创建 Invoke-Expression 的字符串。这时候 $color 是 White '因为循环已经结束,所以所有的按钮最终都会使用 White 创建一个字符串。

    您可以通过调用 GetNewClosure() 来修复它,这将导致在循环期间创建 Invoke-Expression 的字符串,而不是稍后单击按钮时。所以将行改为:

    $run.Add_Click({ Invoke-Expression "notepad C:\Users\User\$color.txt" }.GetNewClosure())
    

    它应该按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 2019-01-26
      相关资源
      最近更新 更多