我的 TreeView 中有大量节点,并且有一个文本框可以过滤它们以突出显示匹配的搜索。然而,它有点混乱,因为它显示了所有其他节点,并且在我更改搜索后,它使所有节点都展开。
我正在尝试做这样的事情,https://www.codeproject.com/Tips/1000621/Filtering-and-Hiding-Tree-Nodes-WinForms https://www.codeproject.com/Tips/1000621/Filtering-and-Hiding-Tree-Nodes-WinForms但我正在使用 Windows 表单/Powershell ISE,并且似乎很难将其实现到我自己的代码中。
对于关闭节点,我尝试使用 (Textbox.textlength -eq 0) 的方式来触发关闭所有节点功能,但这不起作用。
Here is what I want it too look like. Left is what I want, Right is what mine looks like.
这是我正在使用的搜索功能的示例。
Add-Type -AssemblyName System.Windows.Forms
function GetNodes([System.Windows.Forms.TreeNodeCollection] $nodes)
{
foreach ($n in $nodes) {
$n
GetNodes($n.Nodes)
}
}
$form = New-Object System.Windows.Forms.Form
$form.Text ="Test"
$form.Controls.AddRange(@(
($txt = [System.Windows.Forms.TextBox] @{
Location = [System.Drawing.Point]::new(8, 8);
Width = 100;
}),
($btn = [System.Windows.Forms.Button] @{
Location = [System.Drawing.Point]::new(120, 8);
Width = 50;
Text = "Search";
}),
($tree = [System.Windows.Forms.TreeView] @{
Location = [System.Drawing.Point]::new(8, 40);
Width = 170;
HideSelection = $false
})
))
$form.AcceptButton= $btn
$tree.Nodes.Add("A1", "A1")
$tree.Nodes.Add("A2", "A2")
$tree.Nodes[0].Nodes.Add("A11", "A11")
$tree.Nodes[0].Nodes.Add("A12", "A12")
$tree.Nodes[1].Nodes.Add("A21", "A21")
$tree.Nodes[1].Nodes.Add("A22", "A22")
$btn.Add_Click({param($sender,$e)
$nodes = GetNodes($tree.Nodes)
foreach ($node in $nodes) {
if($node.Text -like $txt.Text){
$tree.SelectedNode = $node
$node.EnsureVisible()
break
}
}
})
$form.ShowDialog() | Out-Null
$form.Dispose()