我有一个带有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!"
}
所以问题是,我是否将代码翻译错误,或者是否存在其他问题?
答案 0 :(得分:2)
在原始示例中,HitTest()
是针对传递的Location
对象所携带的EventArgs
值执行的。在您的示例中,您针对HitTest()
执行$treeview1.Location
,无论您在何处点击,我都假设保持不变。
注册事件操作时,请定义一个带有2个参数的参数块(对于您在C#示例中看到的sender
和e
参数):
$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!"
}
})