【问题标题】:One button with 2 actions一键 2 个动作
【发布时间】:2015-09-05 09:07:06
【问题描述】:

我确实尝试制作 1 个按钮来执行 2 个操作:一个在第一次按下(单击)时,另一个在第二次按下(单击),然后重复。然而,我的方法都不适合我,所以我做了第二个按钮来做第二个动作,但我真的很想只有一个。这是一个可以帮助你的小例子:)。

#This creates the all button and sets the event
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(60,20)
$OKButton.Size = New-Object System.Drawing.Size(30,20)
$OKButton.Text = "all"
$OKButton.Add_Click({
  $ua2Checkbox.Checked=$true;
  $nvsCheckbox.Checked=$true;
  $krsCheckbox.Checked=$true;
  $uaCheckbox.Checked=$true;
  $hbrCheckbox.Checked=$true;
})
$objForm.Controls.Add($OKButton)
$objForm.Add_Shown({$objForm.Activate()})

#This creates the none button and sets the event
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(100,20)
$OKButton.Size = New-Object System.Drawing.Size(40,20)
$OKButton.Text = "None"
$OKButton.Add_Click({
  $ua2Checkbox.Checked=$false;
  $nvsCheckbox.Checked=$false;
  $krsCheckbox.Checked=$false;
  $uaCheckbox.Checked=$false;
  $hbrCheckbox.Checked=$false;
})
$objForm.Controls.Add($OKButton)
$objForm.Add_Shown({$objForm.Activate()})

$actionAll = {
  #$ua2Checkbox.Checked=$true;$nvsCheckbox.Checked=$true;$krsCheckbox.Checked=$true;$uaCheckbox.Checked=$true;$hbrCheckbox.Checked=$true;
#$OKButton.Add_Click($ua2Checkbox.Checked=$true;$nvsCheckbox.Checked=$true;$krsCheckbox.Checked=$true;$uaCheckbox.Checked=$true;$hbrCheckbox.Checked=$true;)
#$OKButton.Remove_click({$ua2Checkbox.Checked=$false;$nvsCheckbox.Checked=$false;$krsCheckbox.Checked=$false;$uaCheckbox.Checked=$false;$hbrCheckbox.Checked=$false;})
}
$actionnone = {
 #$ua2Checkbox.Checked=$false;$nvsCheckbox.Checked=$false;$krsCheckbox.Checked=$false;$uaCheckbox.Checked=$false;$hbrCheckbox.Checked=$false;
#$OKButton.Add_Click($ua2Checkbox.Checked=$false;$nvsCheckbox.Checked=$false;$krsCheckbox.Checked=$false;$uaCheckbox.Checked=$false;$hbrCheckbox.Checked=$false;)
#$OKButton.Remove_click({$ua2Checkbox.Checked=$false;$nvsCheckbox.Checked=$false;$krsCheckbox.Checked=$false;$uaCheckbox.Checked=$false;$hbrCheckbox.Checked=$false;})
}


$OKButton.Location = New-Object System.Drawing.Size(60,20)
$OKButton.Size = New-Object System.Drawing.Size(30,20)
$OKButton.Text = "all"
$OKButton.Add_Click({invoke-expression "$actionAll"})
$OKButton.Remove_click({invoke-expression "$actionnone"})
#$OKButton.MouseDoubleClick({$ua2Checkbox.Checked=$false;$nvsCheckbox.Checked=$false;$krsCheckbox.Checked=$false;$uaCheckbox.Checked=$false;$hbrCheckbox.Checked=$false;})
$objForm.Controls.Add($OKButton)
$objForm.Add_Shown({$objForm.Activate()})

【问题讨论】:

    标签: winforms powershell button click action


    【解决方案1】:

    如果要在每次单击按钮时切换按钮的动作,则需要将当前动作替换为每个动作中的另一个动作:

    $actionAll = {
      # other operations here
      $OKButton.Text = 'None'
      $OKButton.Remove_Click($actionAll)
      $OKButton.Add_Click($actionNone)
    }
    
    $actionNone = {
      # other operations here
      $OKButton.Text = 'All'
      $OKButton.Remove_Click($actionNone)
      $OKButton.Add_Click($actionAll)
    }
    
    $OKButton = New-Object System.Windows.Forms.Button
    $OKButton.Text = 'All'
    $OKButton.Add_Click($actionAll)
    $objForm.Controls.Add($OKButton)
    

    【讨论】:

    • 请原谅我的愚蠢,但我无法让它工作...... :(
    • 我试过这种方式,但它对我不起作用,也许我做错了什么:( $okbutton.Remove_click 什么都不做,不知道为什么
    • @filbrinza 在我的示例代码中,您在哪里看到Invoke-Expression?在动作脚本块之外也没有Remove_Click()。请不要有创意。
    • 我首先尝试了您的代码,但它对我不起作用,这就是为什么我认为我误解了某些东西并尝试对您的代码进行一些修改以确保它不起作用.. ...
    • 尝试在$OKButton.Add_Click({$actionAll})中不使用额外的大括号。
    猜你喜欢
    • 2018-08-16
    • 2014-11-04
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    相关资源
    最近更新 更多