C# 樹狀圖-找值,並展開節點!
今天在寫「C# 樹狀圖」,
有二項要求-先找節點,並展開此節點(上層節點到此節點),
基本上找值有二種方法-「BY NAME/BY TEXT」,
以下為範例
/// <summary> /// 呼叫找值 /// </summary> private void FindByText(string _Search, string _Model) { TreeNodeCollection nodes = TB.Nodes; foreach (TreeNode n in nodes) { if (_Model == "Name") { FindRecursive(_Search, n); } if (_Model == "Text") { FindRecursiveText(_Search, n); } } }
/// <summary> /// 找代碼的節點 /// </summary> /// <param name="treeNode"></param> private void FindRecursive(string _Search, TreeNode treeNode) { foreach (TreeNode tn in treeNode.Nodes) { if (tn.Name == _Search.ToString()) { tn.BackColor = Color.Yellow; ShowNode(tn);//展開節點 } else { FindRecursive(_Search, tn); } } }
/// <summary> /// 找科目名稱的節點 /// </summary> /// <param name="treeNode"></param> private void FindRecursiveText(string _Search, TreeNode treeNode) { foreach (TreeNode tn in treeNode.Nodes) { if (tn.Text == _Search.ToString()) { tn.BackColor = Color.Yellow; ShowNode(tn);//展開節點 } else { FindRecursiveText(_Search, tn); } } }
/// <summary> /// 展開節點,先展開第一層節點,所含的節點再全展開 /// </summary> /// <param name="treeNode"></param> private void ShowNode(TreeNode treeNode) { TreeNode _stn; _stn = treeNode; if (_stn.Parent.Name.ToString() != "0")//不為最上層開頭點 {
_stn.Parent.Expand(); ShowNode(_stn.Parent); } else { _stn.Parent.Expand();//先展開第一層節點 } }
這是結果
至於新增節點、刪除節點、節點變色就比較簡單,在此就不討論了!
自我LV~