VB.Net - Wie, um dynamicaly Suche nach einem string in allen TreeView-Knoten erweitern und reduzieren von Knoten matching (oder nicht), den such-string?
Ich versuche zu implementieren dynamische Suche auf einer treeview-Komponente, und ich bin fast fertig mit ihm, außer, dass seit seiner eine dynamische Suche auf der Grundlage der textchanged-Ereignis der textbox, die ersten Zeichen der Zeichenkette werden immer gefunden, so dass die Suche-Funktion erweitern Sie alle Knoten, weil Sie ein gültiges match.
Der Sache ist, dass, wie der Suchbegriff immer mehr, diejenigen Knoten, die sich erweitert, wenn Sie hatte ein Spiel, jetzt muss reduziert werden, weil Sie nicht mehr der Suchzeichenfolge entsprechen... und das ist nicht passiert... ich konnte nicht finden, noch eine Möglichkeit zum reduzieren und erweitern Sie den Knoten dinamically wie der Suchbegriff ändert...
Ich habe ein video hochgeladen und der Visual Studio 2012 solution so nehmen Sie einen Blick auf Sie und sehen, wo Im fallen den ball...
Dies ist der code meiner Funktion, der Suche: (Sie können im video sehen, es funktioniert wie erwartet, also mein problem ist das aufklappen/Zuklappen der Knoten, als Sie übereinstimmen(oder nicht), den such-string.
Ive implementiert einige Ideen in der "FindRecursive" - Funktion zu reduzieren und erweitern Sie die Knoten, aber es funktioniert nicht wie erwartet. Ich schaffte es sogar die Steuerung in einer Endlosschleife durch meine falsche Logik.
Jede Hilfe wird sehr geschätzt,
Tks!
Visual Studio 2012-Projekt + Test-Datei
Private Sub txtFiltroIDs_TextChanged(sender As Object, e As EventArgs) Handles txtFilterToolIDs.TextChanged
ClearBackColor()
FindByText()
End Sub
Private Sub FindByText()
Dim nodes As TreeNodeCollection = tviewToolIDs.Nodes
Dim n As TreeNode
For Each n In nodes
FindRecursive(n)
Next
End Sub
Private Sub FindRecursive(ByVal tNode As TreeNode)
If txtFilterToolIDs.Text = "" Then
tviewToolIDs.CollapseAll()
tviewToolIDs.BackColor = Color.White
ExpandToLevel(tviewToolIDs.Nodes, 1)
Else
Dim tn As TreeNode
For Each tn In tNode.Nodes
' if the text properties match, color the item
If tn.Text.Contains(txtFilterToolIDs.Text) Then
tn.BackColor = Color.Yellow
tn.EnsureVisible() 'Scroll the control to the item
End If
FindRecursive(tn)
Next
End If
End Sub
Private Sub ClearBackColor()
Dim nodes As TreeNodeCollection
nodes = tviewToolIDs.Nodes
Dim n As TreeNode
For Each n In nodes
ClearRecursive(n)
Next
End Sub
Private Sub ClearRecursive(ByVal treeNode As TreeNode)
Dim tn As TreeNode
For Each tn In treeNode.Nodes
tn.BackColor = Color.White
ClearRecursive(tn)
Next
End Sub
CollapseAll()
, aber nur, wenn das Suchfeld leer ist.Idle_Mind, vielen Dank für die Antworten... ich habe versucht, fügen Sie eine tviewToolIDs.CollapseAll() am Anfang von "FindRecursive" - Funktion... Es hängt die Anwendung..
Sie würden auch brauchen, um zu unterdrücken, die Bildschirmaktualisierung während Sie alles neu einstellen und dann die Farbe/erweitern Sie die Spiele. Sie können dies durch aufrufen von BeginUpdate, die Durchführung der änderungen aufrufen EndUpdate um es neu zu zeichnen, in den neuen Staat.
InformationsquelleAutor Daniel Santos | 2015-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgenden meine ersten Kommentare, probieren Sie etwas wie:
InformationsquelleAutor Idle_Mind