检测单击TreeView中的+/-按钮/将C#转换为Powershell

时间:2016-04-01 12:21:53

标签: c# winforms powershell treeview

我有一个带有winform和treeview的powershell脚本。

现在,我需要区分用户是否点击了winforms 树视图节点的名称 或者前面的加号或减号节点。

如果找到此代码:

private void treeView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
    var hitTest = treeView1.HitTest(e.Location);
    if (hitTest.Location == TreeViewHitTestLocations.PlusMinus)
    { 
        //expand collapse clicked
    }
}

在此answer中。我试图把它翻译成Powershell(见下文),它似乎有用......但是: 问题是,无论我在哪里点击,结果总是" 缩进",这是可能的返回值之一(TreeViewHitTestLocations-Enumeration) 但无论我点击哪里,它都不应该一直相同。

$hitlocation = $treeview1.HitTest($treeview1.Location)
Write-Debug "$($hitlocation.location)"

if ($hitlocation.Location -eq [System.Windows.Forms.TreeViewHitTestLocations]::PlusMinus){ 
   # do stuff
   write-host "yes!"
}

所以问题是,我是否将代码翻译错误,或者是否存在其他问题?

1 个答案:

答案 0 :(得分:2)

在原始示例中,HitTest()是针对传递的Location对象所携带的EventArgs值执行的。在您的示例中,您针对HitTest()执行$treeview1.Location,无论您在何处点击,我都假设保持不变。

注册事件操作时,请定义一个带有2个参数的参数块(对于您在C#示例中看到的sendere参数):

$treeview1.add_MouseDoubleClick({

    param($s,$e)

    # Now we can refer to $e like in the example
    $hitlocation = $treeview1.HitTest($e.Location)
    Write-Debug "$($hitlocation.Location)"

    if ($hitlocation.Location -eq [System.Windows.Forms.TreeViewHitTestLocations]::PlusMinus){ 
       # do stuff
       write-host "yes!"
    }
})