2017-09-04 1 views
1

PowerShell에서 트리 뷰를 만들고 모든 항목에 컨텍스트 메뉴를 추가했습니다. 컨텍스트 메뉴 항목 인 선택된 노드를 클릭하면 지금 시도합니다.Powershell에서 TreeView의 상황에 맞는 메뉴에서 현재 노드를 가져올 수 있습니까?

$ctxCreateSiteMenuItem = New-Object System.Windows.Forms.MenuItem 
$ctxCreateSiteMenuItem.Text = "Create a site"   
$ctxCreateSiteMenuItem.Add_Click({CreateSite $this.Parent.Node}) 

$ this로 보았을 때, 현재 상황에 맞는 메뉴 항목입니다. $ this.Parent 이것은 내 컨텍스트 메뉴 항목 목록입니다. $ this.Parent.parent는 빈 값을 반환합니다. C# ou VB에서 보낸 사람에게 액세스 권한이 있기 때문에 솔루션이 정말 쉽지만 여기서는 할 수있는 방법을 찾을 수 없습니다. 자세한 내용을 보려면 마우스 오른쪽 버튼을 클릭하여 상황에 맞는 메뉴를 엽니 다. 이미 노드를 선택하려고 시도하고 컨텍스트 메뉴를 연 후에도 작동하지 않습니다.

function CreateSite{ 
param ( 
      $selectedNode, 
      $sender, 
      $eargs   
     ) 

Write-host $sender 
Write-host $eargs 
+0

'add_Click ({PARAM ($ 보낸 사람, $ eargs) <# used $ sender in here #>}) ' –

+0

매개 변수로 추가했지만 값은 비어 있습니다. 어쩌면 내가 잘못하고있어. – MatDev8

+0

보낸 사람 또는 $ this가 마침내 동일합니다. 나는 같은 지점에있다 @ MathiasR.Jessen – MatDev8

답변

0

글로벌 변수에 마우스 오른쪽 버튼으로 클릭 (반드시 선택) 노드를 저장에 대한 방법 - 그것은 멋진 아니지만 그것을 작동 :

$Form = New-Object System.Windows.Forms.Form 
$Form.Text = "Form1" 
$Form.Size = New-Object System.Drawing.Size(600, 300) 

$TreeView = New-Object System.Windows.Forms.TreeView 
$TreeView.Location = New-Object System.Drawing.Point(12, 12) 
$TreeView.Size = New-Object System.Drawing.Size(500, 200) 
$Form.Controls.Add($TreeView) 

$rootNode = New-Object System.Windows.Forms.TreeNode 
$rootNode.text = "Root" 
$rootNode.name = "RootName" 
[void]$TreeView.Nodes.Add($rootNode) 

for ($i=0; $i -lt 6; $i++) { 
    $subNode = New-Object System.Windows.Forms.TreeNode 
    $subNode.text = "Node{0}" -f $i 
    $subNode.name = "NodeName{0}" -f $i 
    [void]$rootNode.Nodes.Add($subNode) 
} 

$ctxMenu = New-Object System.Windows.Forms.ContextMenu 
$ctxCreateSiteMenuItem = New-Object System.Windows.Forms.MenuItem 
$ctxCreateSiteMenuItem.Text = "Create a site"   
$ctxCreateSiteMenuItem.add_Click({ param($sender, $eargs) 
    Write-Host "SelectedNode: $global:selectedNode" 
}) 
$ctxMenu.MenuItems.AddRange(@($ctxCreateSiteMenuItem)) 

$TreeView.ContextMenu = $ctxMenu 

$TreeView.add_NodeMouseClick({ param($sender, $eargs) 
    $global:selectedNode = $eargs.Node 
}) 

$rootNode.Expand() 

# Show Form // this always needs to be at the bottom of the script! 
$Form.Add_Shown({$Form.Activate()}) 
[void] $Form.ShowDialog() 
+0

마침내 내가 한, 내가 treeview varable 전역 넣어 Treeview.SelectedNode – MatDev8

+0

을 사용하여 선택한 노드를 얻을 문제는 내가 지금 마우스 오른쪽 버튼으로 설정하기 전에 클릭해야합니다 selectedNode. – MatDev8

+0

add_NodeMouseClick은 riht 및 left click 모두에 사용됩니까? – MatDev8

관련 문제