$TextApp1 = "it works"
function DrawButton {
$Temp = "$args"
$ButtonType = Get-Variable -Name "Button$Temp" -Value
$ButtonType | Add-Member -NotePropertyMembers @{ DataTemp = $Temp }
$ButtonType.Add_Click({
$Data = $($this.DataTemp)
$DefaultForm.Text = "$Data"
})
$DefaultGroupBox.Controls.Add($ButtonType)
}
DrawButton App1
现在可以使用了mklement0
这使我离使事情变得更容易管理更近了一步,不知道您提供了多少帮助
约2,000行代码变成了约50行,而我现在每次想按下按钮时都不必重新制作50行代码
答案 0 :(得分:1)
您的问题是事件处理程序在 script 范围的子范围(而不是函数的范围)中运行,因此它看不到$Temp
变量。
换句话说:没有闭包可以捕获$Temp
的值并使其在事件处理程序中可用。
虽然可以使用范围说明符$script:
在脚本范围中设置变量,但通常应避免这种情况,并且在您的情况下,不会为您提供{{1 }}。
您最好的选择是使用DrawButton
将所需的值作为自定义属性附加到按钮对象:
Add-Member
答案 1 :(得分:-1)
我认为您的问题与在调用DrawButton之后在本地声明$ button而不是在全局范围内声明生存有关。 不幸的是,PowerShell没有强制声明Is there an "Option Explicit" in PowerShell?
的好方法另外,您可能有不正确的类型。 $ ButtonType初始化为字符串,但随后将其使用ButtonType.Add_Click作为按钮。
无论如何,只要学习如何调试代码(例如使用Visual Studio Code或PowerGui),就可以自己找到答案。