如何在Windows Form控制項TreeView中遍曆和尋找指定的CheckBox狀態

來源:互聯網
上載者:User

      作為一個常用的的Control,TreeView控制項給了我們很多的展現層次資料來源的能力,其強大的定製性和易用性,非常受用戶端應用程式開發人員們的親萊。不過在展現樹形控制項前面的CheckBox控制項的狀態時,我們有時或者需要遍曆整棵樹來得到所有的CheckBox的設定狀態。

在範例程式碼之前,我們先來展示一下相關的類型:

  1、 TreeView類

  public class TreeView : Control{

   //設定樹中的CheckBox的選中之前和之間觸發的事件

       public event TreeViewEventHandler AfterCheck;
       public event TreeViewCancelEventHandler BeforeCheck;
//設定CheckBoxes啟用狀態,代碼級使用
       public bool CheckBoxes { get; set; }
       //得到當前子節點的最高層的父結點
       public TreeNode TopNode { get; set; }

   }

   2、 TreeNode類:

 public class TreeNode : MarshalByRefObject, ICloneable, ISerializable{
    //當前結點的CheckBox狀態
   public bool Checked { get; set; }
   //附加特殊資訊
   public object Tag { get; set; }
  //遍曆結點鏈表的屬性
  public TreeNode PrevNode { get; }
  public TreeNode FirstNode { get; }
  public TreeNode NextNode { get; }

}

   現在我們就可以通過上面這兩個類提供的相關的屬性和方法來操作TreeView中的CheckBox了。

   意圖:

    我們要得到所有的選中的CheckBox的資訊。這裡我們為了使用的方便,我們在TreeView的結點中用Tag來附加了CheckBox是否選中的標識資訊。

   關鍵步驟分解:

   1、 添加AfterCheck事件以設定TreeNode的CheckBox狀態

   如果使用者選中CheckBox就設定TreeNode的Tag為“True”,否則置為空白,代碼如:

 Private void nodeTree_AfterCheck(object sender, TreeViewEventArgs e){
TreeNode node = e.Node;

if (node.Tag== null)
node.Tag = tag;//附加結點資訊
else

node.Tag = null;

}

  2、 搜尋TreeView的根結點

    由於TreeView的TopNode屬性可以得到當前選中結點的頂級結點,所以我們可以通過它向前遍曆而得到根結點,代碼如:

   TreeNode node= nodeTree.TopNode;//得到TreeView的根結點,注意根結點只有一個

//每次搜尋到根結點

while (node.PrevNode != null)

node = node.PrevNode;

 

3、 遍曆所有的樹結點,以期得到相應的狀態

    這裡為了樣本的方便我們沒有採用從資料庫中擷取資料的方式,而在用了內建的XML資料來源,而且為了顯示狀態我們以MessageBox的方式來呈現結果給使用者。【這裡採用了樹的遞迴演算法】相關代碼如下:

遍曆方法

private void TraversNodes(TreeNode parent){

TreeNode node = parent;

if (node != null){

if(node.Tag !=null&&node.Tag.ToString ()==tag )

nodesTag.AppendFormat("node:{0} has checked\n", node.Name);

//對樹進行遞迴遍曆

if(node.FirstNode !=null ){

TraversNodes(node.FirstNode);

}

if (node.NextNode !=null ){

TraversNodes(node.NextNode);

}

}

}

結果

 

  提示:

  這裡只是對TreeView這處內建控制項的遍曆演算法一種相對簡單的樣本,因為在網上沒有找到相關的資料,所以寫出來給需要的朋友一個參考。範例程式碼

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.