我有如下的树视图,
tables
--table1
--tab1
--tab2
--table2
--tab2
--tab2
我给出了一个文本“tab”并使用treeViewMenu.SelectedNode = txtbox1.Text
,它选择了第一个匹配(即node:table1)
我希望选择名称中包含“tab”的所有节点。 (即表1和表2)
我已尝试将数组传递给treeViewMenu.SelectedNode =array[]
,但这不起作用。
答案 0 :(得分:0)
TreeView
不适用于MultiSelect
。但是,如果您只想查看哪些节点与TextBox
中的字符串匹配,则可以更改此BackColor
的{{1}}。
Nodes
要找出“已选择”哪些节点,您可以使用:
private void txtbox1_TextChanged(object sender, EventArgs e)
{
foreach (TreeNode tn in this.treeViewMenu.Nodes)
{
SetColor(tn);
}
}
private void SetColor(TreeNode Node)
{
if (Node.Text.Contains(this.txtbox1.Text))
{
Node.BackColor = System.Drawing.Color.Blue;
Node.ForeColor = System.Drawing.Color.White;
Node.Tag = true; //for later to find out which Nodes are "selected"
}
else
{
Node.BackColor = System.Drawing.Color.FromKnownColor(System.Drawing.KnownColor.Window);
Node.ForeColor = System.Drawing.Color.FromKnownColor(System.Drawing.KnownColor.WindowText);
Node.Tag = false;
}
foreach (TreeNode subNode in Node.Nodes)
{
SetColor(subNode);
}
}
您还可以使用private void btn_GetSelected_Click(object sender, EventArgs e)
{
string selectedNodes = "";
foreach (TreeNode tn in this.treeViewMenu.Nodes)
{
GetSelectedNodesByTag(tn, ref selectedNodes);
}
MessageBox.Show(selectedNodes, "Selected Nodes");
}
private void GetSelectedNodesByTag(TreeNode Node, ref string SelectedNodes)
{
if ((bool)Node.Tag == true)
{
if (SelectedNodes != "") SelectedNodes += "\n";
SelectedNodes += Node.FullPath;
}
foreach (TreeNode subNode in Node.Nodes)
{
GetSelectedNodesByTag(subNode, ref SelectedNodes);
}
}
- 属性来显示所选节点:
CheckBoxes
找出检查的节点:
private void SetChecked(TreeNode Node)
{
if (Node.Text.Contains(this.txtbox1.Text))
{
Node.Checked = true;
}
else
{
Node.Checked = false;
}
foreach (TreeNode subNode in Node.Nodes)
{
SetChecked(subNode);
}
}