2016-04-01 6 views
0

私はwinformとtreeviewを持つpowershellスクリプトを持っています。TreeView/PowershellへのC#の変換で+/-ボタンをクリックして検出

今、私は、ユーザーがリサイズツリービューノードまたはプラス上またはノードの前にマイナスの名前をクリックしたかどうかを区別する必要があります。このコードを発見した場合は

:このanswer

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

。私はそれをPowershellに翻訳しようとしましたが、それはうまくいくようです...しかし: 問題は、どこでもクリックすると結果は常に "インデント"です。これは可能な戻り値の1つです(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

イベント・アクションを登録し、(あなたがC#サンプルで見sendere引数の)2つのパラメータで、パラメータブロックを定義? –

+1

ああ、問題は、TreeView自体ではなく、 'EventArgs'オブジェクトの場所をテストする必要があるということです –

+0

多分それを正しく行うための例(PowerShellで)を教えてください。 – Moss

答えて

2

元の例では、EventArgsオブジェクトが保持する値Locationに対して、HitTest()が実行されます。あなたの例では、$treeview1.Locationに対してHitTest()を実行します。これは、どこをクリックしても同じままであると仮定しています。 * ** **インデント常に何*

$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!" 
    } 
}) 
+0

C#の「Sender」は、常にイベントの発信元オブジェクトです。 – Moss

+0

@Moss Correct、この場合は '$ treeview1'オブジェクトそのもの –

+1

自動的に' $ Sender'と '$ EventArgs'変数を参照することもできますが、私は個人的に上記のようなパラメータを宣言するのが好きです –

関連する問題