首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VB.NET TreeView 模糊查找高亮:Like 操作符需通配符匹配

     編輯:程式設計綜合問答

VB.NET TreeView 遞歸查找節點文本匹配 TextBox 輸入值,原代碼使用 Like 但缺少通配符,導致只能精確匹配。添加通配符即可實現模糊查找高亮展開。

原代碼問題


If tn.Text Like text.Trim() Then  ' 錯誤:無通配符,等同精確匹配

修正代碼


If tn.Text Like "*" & text.Trim() & "*" Then  ' 正確:前後通配符,包含匹配
    tn.BackColor = Drawing.Color.YellowGreen
    ShowNodes(tn)  ' 展開路徑
End If

完整查找邏輯


Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    ' 清除上次高亮
    ClearHighlights(TreeView1.Nodes)
    
    Dim searchText = TextBox7.Text.Trim()
    If String.IsNullOrEmpty(searchText) Then Return
    
    For Each tnc As TreeNode In TreeView1.Nodes
        FindNodes(tnc, searchText)
    Next
End Sub

Private Sub FindNodes(node As TreeNode, text As String)
    For Each tn As TreeNode In node.Nodes
        If tn.Text Like "*" & text & "*" Then
            tn.BackColor = Color.YellowGreen
            ExpandPath(tn)  ' 展開父節點鏈
        End If
        FindNodes(tn, text)  ' 遞歸子節點
    Next
End Sub

Private Sub ExpandPath(node As TreeNode)
    If node.Parent IsNot Nothing Then
        node.Parent.Expand()
        ExpandPath(node.Parent)
    End If
End Sub

Private Sub ClearHighlights(nodes As TreeNodeCollection)
    For Each tn As TreeNode In nodes
        tn.BackColor = Color.White
        ClearHighlights(tn.Nodes)
    Next
End Sub

Like 操作符通配符表

通配符含義示例
*任意長度任意字符(含 0 個)"abc" Like "*b*" → True
?單個任意字符"abc" Like "a?c" → True
#單個數字 (0-9)"a1c" Like "a#c" → True
[charlist]字符列表中任一字符"a" Like "[abc]" → True
[!charlist]不在字符列表中"d" Like "[!abc]" → True

性能優化建議

  • 節點數 > 1000 時,考慮構建索引 Dictionary(Of String, List(Of TreeNode)) 映射關鍵字到節點
  • 異步查找避免 UI 卡頓:Task.Run(Sub() FindNodes(...)) 回調 UI 更新高亮
  • 高亮顏色用 Node.ForeColor 或 Node.NodeFont 區分,BackColor 可能被主題覆蓋
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved