2017-07-07 1 views
0

Ich habe eine Treeview (wenn es bestimmten Text enthält),, wie mehrere Knoten auszuwählen, wie unten in einem Treeview in C#

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

ich einen Text „Tab“ gebe und treeViewMenu.SelectedNode = txtbox1.Text verwenden, ist es die sehr wählt first match (dh node: table1)

Ich möchte alle Knoten mit "tab" in seinem Namen ausgewählt werden. (d. h. Tabelle1 und Tabelle2)

Ich habe versucht, ein Array an treeViewMenu.SelectedNode =array[] übergeben, aber das funktioniert nicht.

+0

Was wollten Sie tun, nachdem sie ausgewählt wurden? Wie das mögliche Duplikat zeigt, wurde die Baumansicht nicht für Mehrfachauswahl entworfen. – Scrobi

+0

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

Antwort

0

Eine TreeView ist nicht für MultiSelect ausgelegt. Wenn Sie jedoch nur sehen möchten, welche Knoten mit der Zeichenfolge in der TextBox übereinstimmen, können Sie die BackColor dieser Nodes ändern.

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); 
    } 
} 

Um herauszufinden, welche Knoten "ausgewählt" sind, können Sie diese verwenden:

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); 
    } 
} 

Sie könnten auch die CheckBoxes -Property verwenden, um die ausgewählten Knoten zu zeigen:

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); 
    } 
} 

Und Finde heraus, welche Knoten überprüft werden:

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); 
    } 
} 
Verwandte Themen