標籤:
建立一個WinForm項目之後,在表單中放入一個treeView控制項(treeView1),根據資料庫資料填充建立樹節點。資料庫的結構如下:
ID Title P_ID
a 根節點 0
b 子節點1 a
c 子節點2 a
預設P_ID=0的節點為根節點a,下面有2個子節點b、c。
ID列為不重複的文本,在treeView1中表示TreeNode的Name屬性;
Title列為普通文本,在treeView1中表示TreeNode的Text屬性;
P_ID列為父ID,在treeView1中表示TreeNode的Tag屬性。
一、用遞迴方法進行曆遍添加所有節點到treeView1。
在WinForm的Load事件中載入並建立treeView1的節點,用了幾個自訂的方法完成添加節點的操作:
private void CreatTree(){ TreeNode node = new TreeNode(); //定義根節點 Model.getByPID("0"); //自訂的擷取根節點的方法,並轉為屬性 node.Name = Model.ID; //將類Model的各個屬性賦值給根節點 node.Text = Model.Title; node.Tag = Model.P_ID; treeView1.Nodes.Add(node);//將節點node作為treeView1的根節點 cTree(node,node.Name); //調用另一個方法為根節點添加其他 treeView1.ExpandAll(); //展開所有節點}
private void cTree(TreeNode node,string ID)//當前節點,節點的ID{ node.Name = ID; DataTable table = PublicTools.AccessHelper.ExecuteDataTable("select * from CodeEditor where P_ID = @P_ID", new OleDbParameter("@P_ID", ID)); //用自訂的方法根據當前節點的ID尋找所有子節點foreach( DataRow row in table.Rows)//曆遍所有子節點,賦值並添加{TreeNode n =new TreeNode();n.Name = (string)row["ID"];n.Text = (string)row["Title"]; n.Tag = (string)row["P_ID"]; node.Nodes.Add(n);cTree(n,n.Name); //用遞迴的方法添加完整的樹節點 }}
二、處理一般的事件和設定
1、樹節點的單擊事件:treeView1_AfterSelect,代碼:
//使節點標籤可編輯treeView1.LabelEdit = true;
2、樹節點修改完成後事件:treeView1_AfterLabelEdit,代碼:
//使節點標籤不可編輯treeView1.LabelEdit = false;
3、樹節點失去焦點仍高亮的設定:
(1)
treeView1.HideSelection = false; //一般在完成樹節點之後
(2)treeView1_DrawNode 事件:
e.DrawDefault = true;//這裡只是一個預設值,可添加重繪節點的具體代碼
三、TreeView控制項和TreeNode的常用成員:
AfterSelect //單擊事件
TreeView.HideSelection = False; //可讓選中節點保持高亮
Node = TreeView.SelectedNode; //已選中的當前樹節點
string I = treeView1.SelectedNode.Index.ToString()
//當前節點的索引值,由0開始,只限於同父、同級的節點集合
treeView1.SelectedNode.Text = “String”; //設定當前節點的文本
string String = treeView1.SelectedNode.Text; //擷取當前節點的文本
treeView1.SelectedNode.FullPath.ToString();
//當前節點的全路徑,從根節點開始到當前節點,由節點的Text屬性加“\”串連而成的字串,最後的節點後面沒有“\”
treeView1.SelectedNode.Tag;
//當前節點的其他資訊,可以是各種類型,也可以是對象
treeView1.SelectedNode.Name:樹節點的名稱,也是(TreeNodes集合)TreeNodeCollection 中該節點的鍵(key)
treeView1.SelectedNode.Parent; //當前樹節點的父樹節點。
treeView1.SelectedNode.Level; //樹視圖的深度(從零開始)
四、在treeView控制項中,成員Nodes其實就是一個TreeNode的集合,所以也可以使用TreeNodeCollection的成員:
TreeNodeCollection 類,TreeNodes集合類
treeView1.Nodes.Add(字串);
//以字串為顯示文本添加節點到樹集合的末尾
treeView1.Nodes.Add(TreeNode);
//將現有的樹節點添加到樹節點集合的末尾。
treeView1.Nodes.Add(String, String):建立具有指定鍵和文本的新樹節點,並將其添加到集合中。
treeView1.Nodes.Find(string key,bool searchAllChildren):尋找具有指定鍵的樹節點,可以選擇搜尋子節點,返回一個list[]。
初學C#編程,TreeView控制項的學習(WinForm)