【问题标题】:Function to create buttons in a form在表单中创建按钮的功能
【发布时间】:2015-02-11 05:24:21
【问题描述】:

我知道在 PowerShell 中定义按钮的常用方法,但我想创建一个函数来执行此操作以稍微简化脚本,因为我有很多按钮。

我想创建一个函数来简单地创建一个带有以下参数的按钮:

  • 姓名
  • 位置-X
  • 位置-Y
  • 尺寸-X
  • 尺寸-Y
  • 按钮文字
  • 点击调用函数

这是我在脚本开头定义函数的方式

function c_button ($bname, $posx, $posy, $sizex, $sizey, $btext, $Bfunction)
  {
    $bname = New-Object System.Windows.Forms.Button 
    $bname.Location = New-Object System.Drawing.Size($posx,$posy) 
    $bname.Size = New-Object System.Drawing.Size($sizex, $sizey) 
    $bname.Text = $btext
    $bname.Add_Click({$Bfunction}) 
  }

这就是我调用函数的方式:

c_button "Button1" 10 10 150 25 "Open Serverlist file" "list"
$form.Controls.Add($Button1)

这应该替换像这样的标准调用:

$button1 = New-Object System.Windows.Forms.Button 
$button1.Location = New-Object System.Drawing.Size(10,10) 
$button1.Size = New-Object System.Drawing.Size(150, 25) 
$button1.Text = "Open Serverlist file"
$button1.Add_Click({list}) 
$form.Controls.Add($Button1)

我尝试了几种方法来调用该函数,使用(),在$form.Add 中,但都失败了。什么都没有显示。

我也对Forms.LabelForms.CheckBox 进行了尝试,结果相同。

【问题讨论】:

    标签: winforms powershell user-interface button


    【解决方案1】:

    您需要在函数内回显$bname,否则它不会返回任何内容供调用者使用:

    function c_button ($posx, $posy, $sizex, $sizey, $btext, $Bfunction) {
      $bname = New-Object System.Windows.Forms.Button
      $bname.Location = New-Object System.Drawing.Size($posx,$posy)
      $bname.Size = New-Object System.Drawing.Size($sizex, $sizey)
      $bname.Text = $btext
      $bname.Add_Click($Bfunction)
    
      $bname
    }

    然后在变量中捕获函数输出并将其添加到表单中:

    $getList = {
      # code for listing the file here
    }
    
    $Button1 = c_button 10 10 150 25 "Open Serverlist file" $getList
    $form.Controls.Add($Button1)
    

    或者在Add()方法的子表达式中直接调用函数(注意双括号):

    $form.Controls.Add((c_button 10 10 150 25 "Open Serverlist file" $getList))
    

    【讨论】:

    • 以前的form.add版本试过了,又试了,没有结果。将输出放入变量中是个好主意,但我仍然没有得到任何按钮。
    • @Zsolt 因为您的函数不返回任何内容。查看更新的答案。
    • Onw 更多问题:是否可以从变量调用函数?在按钮示例中,我调用函数“列表”并将其添加到 button.click({$bfunction}) 但伯顿不起作用。如果我像之前一样在每个按钮的函数之外调用它就可以了。我也试过:button.click({invoke-function $bfunction })。谢谢!
    • @Zsolt 将功能定义为脚本块并将其传递给参数$Bfunction
    • 谢谢!现在效果很好!到目前为止,我已经保存了 160 多行代码!
    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多