Powershell将函数作为参数传递

时间:2014-06-30 11:04:57

标签: powershell

我是编程世界的新手,我正在尝试创建一个使用函数创建按钮和标签等的表单。创建表单,但传递给按钮单击事件的函数未被传递正确。例如,我有一个创建按钮的功能....

function new_btn ($name, $parent, $x, $y, $l, $h, $text, $onClick){
    $object = New-Object System.Windows.Forms.Button
    $object.Location = New-Object System.Drawing.Point($x, $y)
    $Object.Size = New-Object System.Drawing.Size($l, $h)
    $Object.Text = $text
    $object.add_Click({$onClick})
    New-Variable $name -Value $object -Scope global
    (Get-Variable $parent).Value.Controls.Add((Get-Variable $name).value)
}

然后,我想要在按钮点击上运行该功能.....

function msg {
    [System.Windows.Forms.MessageBox]::Show("We are proceeding with next step.") 

}

然后我调用该函数并将其输入参数.......

new_btn getdbslist tab1 20 50 69 23“获取数据库”msg

这会按预期生成按钮并将其添加到tab1,但点击事件不起作用,根本不会发生任何事情。任何帮助将非常感谢!

1 个答案:

答案 0 :(得分:1)

你只是传递一个字符串。而是传递一个脚本块:

new_btn getdbslist tab1 20 50 69 23 'Get DBs' {
  [System.Windows.Forms.MessageBox]::Show("We are proceeding with next step.") 
}

在您的new_btn函数中,您可能只需要使用

$object.add_Click($onClick)

如果你真的想传递一个字符串,那么你可能需要使用以下内容:

$object.add_Click({ & $onClick })