TreeView de recherche
Cette fonction trouver seulement première nœud dans l'arborescence, qui contient Texterecherché.
private TreeNode SearchNode(string SearchText,TreeNode StartNode)
{
TreeNode node=null;
while (StartNode!= null)
{
if (StartNode.Text.ToLower().Contains(SearchText.ToLower()))
{
node = StartNode;
break;
};
if (StartNode.Nodes.Count != 0)
{
node=SearchNode(SearchText, StartNode.Nodes[0]);//Recursive Search
if (node != null)
{
break;
};
};
StartNode = StartNode.NextNode;
};
return node;
}
private void button1_Click(object sender, EventArgs e)
{
string SearchText = this.textBox1.Text;
if (SearchText == "")
{
return;
};
TreeNode SelectedNode = SearchNode(SearchText, treeView1.Nodes[0]);
if (SelectedNode != null)
{
this.treeView1.SelectedNode = SelectedNode;
this.treeView1.SelectedNode.Expand();
this.treeView1.Select();
};
}
Comment dois-je le modifier, de sorte que la fonction sera en mesure de trouver non seulement le premier nœud, mais tous, à chaque fois lorsque je clique sur le bouton1, il va trouver nœud suivant jusqu'à la fin, et puis il commence à partir du début. Donc, je ne dois pas chercher pas de TreeView1.Les nœuds[0], mais à partir de TreeView1.SelectedNode...
Est-ce WinForms ou ASP.Net? Il y a deux parties à cette question, vraiment - trouver les nœuds, puis de les afficher. Je suppose que c'est pourquoi l'auteur a créé la fonction ne retourne qu'un seul nœud de manière à élargir l'arbre pour que seul nœud.
C'est WinForms. Je n'ai pas besoin d'afficher tous les nœuds dans le même temps, j'ai besoin de Sélectionner des nœuds par rotation
C'est WinForms. Je n'ai pas besoin d'afficher tous les nœuds dans le même temps, j'ai besoin de Sélectionner des nœuds par rotation
OriginalL'auteur Romz | 2012-07-17
Vous devez vous connecter pour publier un commentaire.
Quelque chose comme ce qui suit doit être fine pour ajouter à votre Formulaire de code.
Il y a deux parties à la présente;
Recueillir tous les nœuds dans un
List<TreeNode>
Page par le biais de la
List<TreeNode>
si la recherche n'a pas changé. Si la Recherche a changé, de vider la liste et de réinitialisation de l'indexation.J'ai testé avec Windows Forms exécute .Net 4 - pages à chaque nœud d'une Arborescence qui contient le texte de la recherche, 1 par 1 jusqu'à ce qu'il atteigne le dernier nœud.
Solution sympa :).
OriginalL'auteur dash
Vous aurez besoin pour créer une collection de noeuds (comme la Liste) et de l'ajout de chaque trouvé nœud à la liste et revenir qu'au lieu d'un seul nœud. Aussi, vous devrez supprimer tous les break
Hmm, aucune mention de cela dans le post original ("tous, à chaque fois lorsque je clique sur le bouton1"). Dans ce cas, il suffit de laisser SearchNodes la même, et de stocker la valeur de retour quelque part et le passer dans la StartNode argument. (par défaut à treeView1.Les nœuds[0])...
Acctually je n'ai pas besoin de stocker la valeur de retour, je peux juste écrire treeView1.SelectedNode ("SelectedNode" est le dernier résultat de SearchNode fonction). Mais cela ne fonctionne pas si le résultat est dérivé de nœud, je ne sais pas Pourquoi
À moins que quelqu'un a cliqué sur un autre nœud d'arborescence, auquel cas vous risquez de rater certains des résultats.
Aussi j'ai besoin de recherche n'est pas de treeView1.SelectedNode, mais à partir de treeView1.SelectedNode.NextNode ou quelque chose comme ça, parce que treeView1.SelectedNode est résultat précédent, je l'ai déjà trouvé. Mais treeView1.SelectedNode.NextNode peut être null
OriginalL'auteur Peter Ritchie
J'utilise cette solution pour la recherche contient du texte sur les noeuds de l'arbre
OriginalL'auteur adminpro