A TreeView
is not designed for MultiSelect
. But if you only want to see which Nodes match to the string in the TextBox
you can change the BackColor
of this 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);
}
}
To find out which Nodes are "selected" you can use this:
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);
}
}
You also could use the CheckBoxes
-Property to show the selected Nodes:
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);
}
}
And find out which Nodes are checked:
private void GetCheckedNodes(TreeNode Node, ref string SelectedNodes)
{
if (Node.Checked)
{
if (SelectedNodes != "") SelectedNodes += "\n";
SelectedNodes += Node.FullPath;
}
foreach (TreeNode subNode in Node.Nodes)
{
GetCheckedNodes(subNode, ref SelectedNodes);
}
}