A TreeView
不適用於MultiSelect
。但是,如果您只想查看哪些節點與TextBox
中的字符串匹配,則可以更改此Nodes
的BackColor
。
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);
}
}
而且找出哪些節點被檢查:
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);
}
}
他們被選中後想做什麼?由於可能的重複顯示,樹視圖不是爲多選而設計的。 – Scrobi
也在這裏:https://stackoverflow.com/questions/25499249/how-do-i-select-multiple-nodes-at-a-time-from-treeview-control-using-c-sharp-and – MalvEarp