带有Click事件的KeyDown

时间:2016-06-30 18:31:28

标签: forms winforms powershell events

对于我正在处理的表单,我遇到了一些麻烦。我有一个按钮,提示用户是/否框,我想添加功能,如果他们在单击按钮时按住shift键,它们将绕过提示。这是我到目前为止在Click事件scriptblock中尝试的内容,但似乎没有任何效果:

    if($_.KeyCode -eq 'Shift'){
        #Stuff
    }

    if($_.Shift){
        #Stuff
    }

我有什么想法可以让它发挥作用?

1 个答案:

答案 0 :(得分:2)

点击事件没有键码。以下适用于PowerShell v2 - 在更高版本中可能有更简单的方法。

function Get-KeyState([uint16]$keyCode)
 {
   $signature = '[DllImport("user32.dll")]public static extern short GetKeyState(int nVirtKey);'
   $type = Add-Type -MemberDefinition $signature -Name User32 -Namespace GetKeyState -PassThru
   return [bool]($type::GetKeyState($keyCode) -band 0x80)
 } 

Add-Type -AssemblyName System.Windows.Forms 
$Form = New-Object system.Windows.Forms.Form
$button = New-Object System.Windows.Forms.Button
$button.Text = 'hi'
$Form.Controls.Add($button)

$button.add_Click(
    {
        $VK_SHIFT = 0x10
        $ShiftIsDown =  (Get-KeyState($VK_SHIFT))        

        if ($ShiftIsDown){
            [System.Windows.Forms.MessageBox]::Show("Hi, you clicked the button with shift." ,"My Dialog Box")
        }
        else{        
            [System.Windows.Forms.MessageBox]::Show("Hi, you clicked the button without shift." ,"My Dialog Box")
        }

    }
)

$Form.ShowDialog()