如何判断从哪里调用Powershell事件处理程序



我有一个PowerShell脚本,它可以创建WinForms GUI。在主窗体上有大量按钮(PushButtons(,每个按钮都有不同的名称/文本我正试图找到一种方法,迭代地为每个按钮提供一个点击事件监听器,该监听器将相应按钮的名称写入控制台问题是,无论何时调用函数(我最初传递给"$button.Add_Click({function}("的函数(,我都不太确定如何从该函数中引用/访问按钮的名称。这几乎就像我不再在被点击的按钮的范围内,所以我真的无法再访问该按钮了。

示例:

$ButtonArray.ForEach({
$_.Add_Click({ Say-Name })
})
function Say-Name() {
Write-Host # How do I access the button's properties?
}

在上面的例子中,我被困在写主机部分。我曾尝试使用$_来引用按钮,但事实证明$_实际上是指System.Windows.Forms.MouseEventArgs对象。我曾尝试通过Add_Click脚本块传递参数,但这不起作用,因为一旦进入脚本块,我就无法访问任何外部信息如何让函数知道是哪个按钮调用了它

传递给.add_<event>()方法(相当于C#中的.<event> +=(的脚本块充当EventHandler委托,因此传递两个参数:
  • 发送方(始发对象(:在您的情况下,触发事件的[System.Windows.Forms.Button]

  • 事件自变量(详细信息(:从[System.EventArgs]派生的类型的实例,或者对于没有自变量的事件,从[System.EventArgs]::Emptysingleton派生的类型实例;该信息也隐式地反映在自动变量CCD_ 11中。

因此,为了获得手头按钮控件的名称,声明这些参数,这样您就可以访问它们:

$_.add_Click({ 
param($sender, $eventArgs)
$buttonName = $sender.Name
})

最新更新