Powershell按钮处理程序和传递参数

时间:2015-05-19 15:25:53

标签: user-interface powershell

This page建议将处理程序创建为函数是最好的,因为它是传递参数的唯一方法。

我的问题是,如何将参数传递给按钮处理程序?

假设我想将当前用户配置文件作为参数传递,并在单击按钮时显示它,我该怎么做?

假设我有这段代码:

#Pass a parameter to the button function to display current user
Function Button_Click()
{
    [System.Windows.Forms.MessageBox]::Show("Hello World." , "My Dialog Box")
}
Function Generate-Form {

    Add-Type -AssemblyName System.Windows.Forms    
    Add-Type -AssemblyName System.Drawing

    # Build Form
    $Form = New-Object System.Windows.Forms.Form
    $Form.Text = "My Form"
    $Form.Size = New-Object System.Drawing.Size(200,200)
    $Form.StartPosition = "CenterScreen"
    $Form.Topmost = $True

    # Add Button
    $Button = New-Object System.Windows.Forms.Button
    $Button.Location = New-Object System.Drawing.Size(35,35)
    $Button.Size = New-Object System.Drawing.Size(120,23)
    $Button.Text = "Show Dialog Box"

    $Form.Controls.Add($Button)

    #Add Button event 
    $Button.Add_Click({Button_Click})


    #Show the Form 
    $form.ShowDialog()| Out-Null 

} #End Function 

#Call the Function 
Generate-Form

1 个答案:

答案 0 :(得分:3)

您已经构建了该功能。您只需要添加参数并在调用函数时传递它们。一个简单的param将覆盖它。

 
Function Button_Click()
{
    param($text)
    [System.Windows.Forms.MessageBox]::Show("$text" ,"My Dialog Box")
}

然后使用配置文件环境变量调用函数:

#Add Button event 
$Button.Add_Click({Button_Click $env:USERPROFILE})

根据您的处理程序的复杂程度,在您的函数中使用advanced parameters可能更好。

Function Button_Click()
{
    param(
        [parameter(Mandatory=$true)]
        [String]$Text,
        [parameter(Mandatory=$true)]
        [String]$Title
    )
    [System.Windows.Forms.MessageBox]::Show($text ,$Title)
}


#Add Button event 
$Button.Add_Click({Button_Click -Text $env:USERPROFILE -Title "My Dialog Box"})