在我們Windows.Forms
形式默認複選框行爲,我們正在努力實現以下目標:PowerShell的.NET模仿Windows爲TreeNodes的
- 檢查/取消所有當您檢查/取消父節點的子節點。
- 自動檢查父節點是否檢查了其所有子節點。
- 如果未選中某個子節點,則自動取消選中父節點。
測試代碼:
$form = New-Object System.Windows.Forms.Form
$treeView = New-Object System.Windows.Forms.TreeView
$treeView.Dock = 'Fill'
$treeView.CheckBoxes = $true
$N1 = $treeView.Nodes.Add('Node 1')
$N2 = $treeView.Nodes.Add('Node 2')
$N3 = $treeView.Nodes.Add('Node 3')
$newNode = New-Object System.Windows.Forms.TreeNode
$newNode.Name = 'Node 1 Sub 1'
$newNode.Text = 'Node 1 Sub 1'
$N1.Nodes.Add($newNode)
$newNode = New-Object System.Windows.Forms.TreeNode
$newNode.Name = 'Node 1 Sub 2'
$newNode.Text = 'Node 1 Sub 2'
$N1.Nodes.Add($newNode) | Out-Null
# There can be deeper levels of treenodes
$TV_AfterCheck = {
if($_.Node.Checked) {
#[System.Windows.Forms.MessageBox]::Show('Node ' + $_.Node.Text + ' checked')
}
else {
#[System.Windows.Forms.MessageBox]::Show('Node ' + $_.Node.Text + ' unchecked')
}
}
$treeView.Add_AfterCheck($TV_AfterCheck)
$form.Controls.Add($treeView)
$form.ShowDialog()
我找到了解決方案是專爲另一種語言,我不能讓它在PowerShell中工作。關於這個主題有很多信息,但它都是用其他編程語言編寫的。
解決方案的另一種語言:
Private Sub CheckChildNode(ByVal currNode As TreeNode)
'set the children check status to the same as the current node
Dim checkStatus As Boolean = currNode.Checked
For Each node As TreeNode In currNode.Nodes
node.Checked = checkStatus
CheckChildNode(node)
Next
End Sub
Private Sub CheckParentNode(ByVal currNode As TreeNode)
Dim parentNode As TreeNode = currNode.Parent
If parentNode Is Nothing Then Exit Sub
parentNode.Checked = True
For Each node As TreeNode In parentNode.Nodes
If Not node.Checked Then
parentNode.Checked = False
Exit For
End If
Next
CheckParentNode(parentNode)
End Sub
Private Sub treeview_AfterCheck(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.TreeViewEventArgs) Handles treeview.AfterCheck
RemoveHandler treeview.AfterCheck, AddressOf treeview_AfterCheck
CheckChildNode(e.Node)
CheckParentNode(e.Node)
AddHandler treeview.AfterCheck, AddressOf treeview_AfterCheck
End Sub
這真的是巨大的,如果有人可以幫助我將其粘貼在一起,所以它會在PowerShell中工作。感謝您的幫助。
這不是C#... – arco444