如何从Powershell中的TreeView中的上下文菜单中获取当前节点?

时间:2017-09-04 09:32:55

标签: winforms powershell treeview

我在powershell中创建了一个树视图,并在每个项目中添加了一个上下文菜单。 当我点击上下文菜单项时,我尝试获取所选节点。

$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

1 个答案:

答案 0 :(得分:0)

如何将右键单击(不一定是Selected)节点存储在全局变量中 - 它不是很好但是有效:

$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()