五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > C# TreeNode的使用方法和實例

C# TreeNode的使用方法和實例

文章來源:365jz.com     點擊數(shù):3656    更新時間:2018-06-12 11:10   參與評論

添加節(jié)點

private void Form1_Load(object sender, EventArgs e)  
{  
    treeView1.LabelEdit = true;//可編輯狀態(tài)。  
  
    //添加一個節(jié)點,這個結(jié)點是根節(jié)點。  
    TreeNode node = new TreeNode();  
    node.Text = "hope";  
    treeView1.Nodes.Add(node);  
  
    TreeNode node1 = new TreeNode();  
    node1.Text = "hopeone";  
    TreeNode node11 = new TreeNode();  
    node11.Text = "hopeoneone";  
    TreeNode node2 = new TreeNode();  
    node2.Text = "hopetwo";  
  
    node1.Nodes.Add(node11);//在node1下面在添加一個結(jié)點。  
  
    node.Nodes.Add(node1);//node下的兩個子節(jié)點。  
    node.Nodes.Add(node2);  
  
  
    TreeNode t = new TreeNode("basil");//作為根節(jié)點。  
    treeView1.Nodes.Add(t);  
    TreeNode t1 = new TreeNode("basilone");  
    t.Nodes.Add(t1);  
    TreeNode t2 = new TreeNode("basiltwo");  
    t.Nodes.Add(t2);  
}


刪除

private void button1_Click(object sender, EventArgs e)  
      {  
          //點擊該按鈕的時候,會移除選中項  
          treeView1.Nodes.Remove(treeView1.SelectedNode);  
      }

 


修改

private void button2_Click(object sender, EventArgs e)  
       {  
           //點擊這個按鈕的時候,可以修改選中項  
           //注意:在使用這個屬性的時候,必須設(shè)置treeView1.LabelEdit =true,否則會提示錯誤。  
           treeView1.SelectedNode.BeginEdit();  
       }


C#中Treeview判斷選擇的節(jié)點并執(zhí)行不同的方法

Treeview,點擊不同的節(jié)點(包括父節(jié)點和父節(jié)點下的子節(jié)點)觸發(fā)不同的事件,執(zhí)行相應(yīng)的方法

方法1:
treeView1_AfterSelect事件就是treeView1中節(jié)點被選擇觸發(fā)的事件,e.Node指的是當(dāng)前選中的節(jié)點,e.Node.Nodes指的是當(dāng)前選中節(jié)點的子節(jié)點集合。

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)  
      {  
          if (e.Action == TreeViewAction.ByMouse)  
          {  
              //當(dāng)前選中的節(jié)點有父節(jié)點,并且該父節(jié)點在相同級別的父節(jié)點中排行第一。  
              if (e.Node.Parent != null && e.Node.Parent.Index == 0)  
              {    
                  //當(dāng)前選中節(jié)點在所有的兄弟節(jié)點中排第 一  
                  if(e.Node.Index==0)   
                  {  
                       //調(diào)用相應(yīng)的方法();  
                  }  
              }  
              //表示當(dāng)前節(jié)點沒有父節(jié)點,并且在兄弟節(jié)點中排行第五(由零開始索引)  
              if(e.Node.Parent==null&&e.Node.Index==4)  
              {  
             //調(diào)用相應(yīng)的方法();  
               }  
          }  
      }

 

方法二:

通過節(jié)點的Name屬性來判斷具體是哪個節(jié)點被選擇,并執(zhí)行相應(yīng)的方法(這種方法效率高一些)

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)  
        {  
             if (e.Action == TreeViewAction.ByMouse)  
             {  
                 //說明當(dāng)前選中節(jié)點沒有子節(jié)點  
                 if(e.Node.Nodes.Count==0)  
                 {  
                      if(e.Node.name="aaa")  
                      {  
                           //執(zhí)行相應(yīng)的方法();  
                      }  
                      else if(e.Node.Name="bbb")  
                      {  
                           //執(zhí)行相應(yīng)的方法();  
                      }  
                 }  
            }

          

C# 怎么判斷TreeView選中的是子節(jié)點 ?并且是屬于哪個父節(jié)?

TreeNode selNode = tree.SelectedNode;  
if (selNode == null)  
{  
    //防止空引用  
    return;  
}  
if (selNode.Parent != null)  
{  
    //為有父親節(jié)點的,  
    TreeNode parentNode = selNode.Parent;//得到父親節(jié)點                
    if (selNode.Nodes.Count == 0)  
    {  
        //為沒有子節(jié)點,即選中的節(jié)點為葉子節(jié)點  
    }  
}


C#.Net中TreeView控件右鍵選擇節(jié)點問題處理

private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)    
{    
    if(e.Button==MouseButtons.Right)    
    {    
        TreeNode tn=treeView1.GetNodeAt(e.X,e.Y);    
        if(tn!=null)treeView1.SelectedNode = tn;    
    }    
}

  

treeView默認(rèn) 展開

treeView1.ExpandAll();

 

默認(rèn)選中TreeVIew中的一個節(jié)點

//先找到你要設(shè)置選中的節(jié)點  
TreeNode tn = treeView1.Nodes[3];  
//把要設(shè)置的節(jié)點給SelectedNode  
this.treeView1.SelectedNode = tn;  
//this.TreeView1.SelectedNodeIndex="";

 

TreeView,左鍵單擊節(jié)點時可修改節(jié)點名稱

TreeView本身可支持左鍵修改名稱
在初始化時設(shè)置:
TreeView.LabelEdit = true;
這樣應(yīng)用程序的treeview生成以后就支持單擊節(jié)點修改。
如果不想左鍵修改,可在treeView1_MouseDown中設(shè)置treeView1.LabelEdit = false; 
右鍵菜單 重命名

treeView1.LabelEdit = true;
treeView.SelectedNode.BeginEdit();

TreeVIew清空

TreeView.Nodes.Clear()

 

C# 遍歷treeview


1. 設(shè)置全部選中或全部選中,設(shè)置參數(shù)flag(true/false)

       private void checkSubNodes(TreeNode treeNode,bool flag)
        {
            treeNode.Checked = flag;
             foreach (TreeNode tn in treeNode.Nodes)
            {
                PrintRecursive(tn,flag);
            }
        }
       private void CheckTreeview(TreeView treeView,bool flag)
        {
            TreeNodeCollection nodes = treeView.Nodes;
            foreach (TreeNode n in nodes)
            {
                checkSubNodes(n,flag);
            }
        }


 


2.選中狀態(tài)的改變:只要選中一個子節(jié)點,其父節(jié)點就是選中的

     我的項目里同時在數(shù)據(jù)區(qū)添加了點數(shù)據(jù)

     private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Action != TreeViewAction.Unknown)
            {
                CheckAllChildNodes(e.Node, e.Node.Checked);
                //選中父節(jié)點 
                bool bol = e.Node.Checked;
                if (e.Node.Parent != null)
                {
                    
                    for (int i = 0; i < e.Node.Parent.Nodes.Count; i++)
                    {
                        if (e.Node.Parent.Nodes[i].Checked)
                            bol = true;
                    }
                    e.Node.Parent.Checked = bol;
                    e.Node.Parent.Tag = 1;
                }
            } 
        }
 
      //選中子節(jié)點 
        public void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
        {
            foreach (TreeNode node in treeNode.Nodes)
            {
                if (nodeChecked)
                {
                    node.Tag = 1;
                }
                else
                {
                    node.Tag = 0;
                }
                node.Checked = nodeChecked;
                if (node.Nodes.Count > 0)
                {
                    this.CheckAllChildNodes(node, nodeChecked);
                }
            }
        }


3.設(shè)置指定的節(jié)點為選中狀態(tài)

      private void SelectSubNodes(TreeNode treeNode, string nodeName)
        {
            if (treeNode.Text.Equals(nodeName))
            {
                treeNode.Checked = true;
            }
                      foreach (TreeNode tn in treeNode.Nodes)
            {
                SelectSubNodes(tn, nodeName);
            }
        }
        private void SelectNodes(TreeView treeView, string nodeName)
        {
            TreeNodeCollection nodes = treeView.Nodes;
            foreach (TreeNode n in nodes)
            {
                SelectSubNodes(n, nodeName);
            }
        }


問題描述:

1.利用treeView控件的Add函數(shù)添加一個名稱為123的節(jié)點,如treeView.Nodes.Add( "123" );  

2.當(dāng)想要搜索得到該節(jié)點時,使用 TreeNode[] nodes = treeView.Nodes.Find("123", true);

理想中應(yīng)該返回第一步中插入的值,但實際結(jié)果卻不然。

 

解決過程:


Find() method takes key (not a value).

   TreeNode root = new TreeNode("root"); 
 
            TreeNode t1 = new TreeNode(); 
            t1.Nodes.Add("A","A1"); 
            t1.Nodes.Add("B","B2"); 
            t1.Nodes.Add("C","C3"); 
            root.Nodes.Add(t1); 
            TreeNodeCollection tc = root.Nodes; 
            var tt = tc.Find("A",true  ); 

 

2. 原來,TreeView 控件的Add方法有好幾個重載,之前我使用的是Add( string value ), 只設(shè)置了新插入節(jié)點的屬性值,而沒有設(shè)定新節(jié)點的key。而查找函數(shù)Find的原型為Find(string Key ),它是根據(jù)key來查找的。因為新插入節(jié)點的key沒有設(shè)定,所以無法找到。

 

解決方法:

使用Add的另一個重載方法 treeView.Nodes.Add( "123","value"  );

這時候,新插入節(jié)點的key是"123"  ,value是"value",然后使用TreeNode[] nodes = treeView.Nodes.Find("123", true);就能得到剛剛插入的節(jié)點了


總結(jié)


當(dāng)前選中項:TreeView.SelectedNode 
增加頂級節(jié)點:TreeView.Nodes.Add("Key", "Text") 
增加同級節(jié)點:TreeView.SelectedNode.Parent.Nodes.Add("Key", "Text") 
增加子節(jié)點:TreeView.SelectedNode.Nodes.Add("Key", "Text") 
全部展開:TreeView.ExpandAll() 
全部收攏:TreeView.CollapseAll() 

全部清空:TreeView.Nodes.Clear() 

如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會為你解答?。?點擊進(jìn)入論壇

發(fā)表評論 (3656人查看,0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號