2017-07-07 28 views
0

我有一個像下面一個TreeView,如何選擇多個節點(如果它包含特定文本)在C#中的一個TreeView

tables 
--table1 
    --tab1 
    --tab2 
--table2 
    --tab2 
    --tab2 

我給一個文本「標籤」,用treeViewMenu.SelectedNode = txtbox1.Text,它選擇了很第一場比賽(即節點:table1)

我希望所有的節點在其名稱中都有「tab」選項。 (即表1和表2)

我曾嘗試將數組傳遞給treeViewMenu.SelectedNode =array[],但這不起作用。

+0

他們被選中後想做什麼?由於可能的重複顯示,樹視圖不是爲多選而設計的。 – Scrobi

+0

也在這裏:https://stackoverflow.com/questions/25499249/how-do-i-select-multiple-nodes-at-a-time-from-treeview-control-using-c-sharp-and – MalvEarp

回答

0

A TreeView不適用於MultiSelect。但是,如果您只想查看哪些節點與TextBox中的字符串匹配,則可以更改此NodesBackColor

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); 
    } 
} 
相關問題