我在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
答案 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()