TreeView控件

        儘管一個典型的樹結構只有一個根節點,但 TreeView 控件允許您向樹結構中添加多個根節點。當您要顯示項目列表,但不顯示單個主根節點時(例如在產品類別列表中),這一功能很有用。

       

        每個節點都具有一個 Text 屬性和一個 Value 屬性。Text 屬性的值顯示在 TreeView 控件中,而 Value 屬性則用於存儲有關該節點的任何附加數據(例如傳遞給與節點相關聯的回發事件的數據)。

     

單擊 TreeView 控件的節點時,將引發選擇事件(通過回發)或導航至其他頁。未設置 NavigateUrl 屬性時,單擊節點將引發 SelectedNodeChanged 事件,您可以處理該事件,從而提供自定義的功能。每個節點還都具有 SelectAction 屬性,該屬性可用於確定單擊節點時發生的特定操作,例如展開節點或摺疊節點。若要在單擊節點時不引發選擇事件而導航至其他頁,可將節點的 NavigateUrl 屬性設置爲除空字符串 ("") 之外的值。

節點的文本可以是兩種模式之一:選擇模式或導航模式。默認情況下,會有一個節點處於選定狀態。若要使節點處於導航模式,請將節點的 NavigateUrl 屬性設置爲空字符串以外的值。當節點處於導航模式時,禁用該節點的所有選擇事件。單擊處於導航模式的節點可將用戶鏈接到指定的 URL。可以選擇設置 Target 屬性以指定用來顯示鏈接內容的窗口或框架。

此屬性的值存儲在視圖狀態中

下面的代碼示例演示如何設置下一代碼示例的框架

       <html>
         
    
<frameset cols="30%, 75%">
   
        
<frame name="Menu" src="TreeViewFramecs.aspx"/>
        
<frame name="Content" src="Home.aspx"/> 
           
    
</frameset>      
   
</html>

下面的代碼示例演示如何使用 NavigateUrl 屬性指定單擊節點時鏈接到的 URL。此示例用於在前一示例的框架集內顯示一個目錄。

<%@ Page Language="C#" %>

<html>
  
<body>
    
<form runat="server">
    
      
<h3>TreeView Declarative Syntax Example</h3>
      
      
<asp:TreeView id="SampleTreeView" 
        runat
="server">
         
        
<Nodes>
        
          
<asp:TreeNode Value="Home" 
            NavigateUrl
="Home.aspx" 
            Text
="Home"
            Target
="Content" 
            Expanded
="True">
             
            
<asp:TreeNode Value="Page 1" 
              NavigateUrl
="Page1.aspx" 
              Text
="Page1"
              Target
="Content">
               
              
<asp:TreeNode Value="Section 1" 
                NavigateUrl
="Section1.aspx" 
                Text
="Section 1"
                Target
="Content"/>
                 
            
</asp:TreeNode>              
            
            
<asp:TreeNode Value="Page 2" 
              NavigateUrl
="Page2.aspx"
              Text
="Page 2"
              Target
="Content">
               
            
</asp:TreeNode> 
            
          
</asp:TreeNode>
        
        
</Nodes>
        
      
</asp:TreeView>

    
</form>
  
</body>
</html>

TreeView 控件的主要屬性包括 Nodes 和 SelectedNode。Nodes 屬性包含樹視圖中的頂級節點列表集合(類型爲TreeNodeCollection,因爲TreeNode可包含多個根節點,所以通過該屬性可獲取TreeView控件中所有根節點)。SelectedNode 屬性設置當前選中的節點(類型爲TreeNode)。由於 Windows 窗體 TreeView 控件以分層的方式顯示節點,因此,在添加節點時,必須注意其父節點。

在設計器中添加或移除節點

  • 選擇 TreeView 控件。
  • 在“屬性”窗口中,單擊 Nodes 屬性旁帶“省略號”的按鈕。 顯示“樹節點編輯器”。
  • 若要添加節點,必須存在根節點;如果不存在根節點,必須先單擊“添加根”按鈕添加一個根節點。然後,就可通過選擇根節點或任何其他節點並單擊“添加子級”按鈕來添加子節點。
  • 若要刪除節點,請選擇要刪除的節點,然後單擊“刪除”按鈕。

 

以編程方式添加、移除節點 

  • 使用樹視圖 Nodes 屬性的 Add 方法。
          TreeNode newNode = new TreeNode("Text for new node");
          treeView1.SelectedNode.Nodes.Add(newNode);
  • 使用樹視圖 Nodes 屬性的 Remove 方法移除單個節點,或使用 Clear 方法清除所有節點。
          TreeView1.Nodes.Remove(treeView1.SelectedNode);
          TreeView1.Nodes.Clear(); 

循環訪問TreeView 控件的所有節點

爲了對節點值執行某種運算,查看 Windows 窗體 TreeView 控件中的每個節點有時是很有用的。利用遞歸過程可完成此操作,該過程循環訪問每個樹集合中的每個節點。

樹視圖中的每個 TreeNode 對象都具有可用於定位樹視圖的屬性:FirstNode、LastNode、NextNode、PrevNode 以及 Parent。Parent 屬性值是當前節點的父節點。當前節點如果有子節點,則子節點將列在它的 Nodes 屬性中。TreeView 控件本身具有 TopNode 屬性,該屬性是整個樹視圖的根節點。

 

private void PrintRecursive(TreeNode treeNode)
{
   
// Print the node.
   System.Diagnostics.Debug.WriteLine(treeNode.Text);
   MessageBox.Show(treeNode.Text);
   
// Print each node recursively.
   foreach (TreeNode tn in treeNode.Nodes)
   {
      PrintRecursive(tn);
   }
}

// Call the procedure using the TreeView.
private void CallRecursive(TreeView treeView)
{
   
// Print each node recursively.
   TreeNodeCollection nodes = treeView.Nodes;
   
foreach (TreeNode n in nodes)
   {
      PrintRecursive(n);
   }
}

確定被單擊的 TreeView 節點
使用 EventArgs 對象返回對已單擊節點對象的引用。

通過檢查 TreeViewEventArgs 類(它包含與事件有關的數據),確定單擊了哪個節點。

protected void treeView1_AfterSelect (object sender, System.Windows.Forms.TreeViewEventArgs e)
{
   
// Determine by checking the Text property.
   MessageBox.Show(e.Node.Text);
}
      

 

注意
或者,可以使用 MouseDown 或 MouseUp 事件的 MouseEventArgs,獲得單擊處的 Point 的 X 和 Y 座標值。然後,使用 TreeView 控件的 GetNodeAt 方法確定單擊了哪個節點。

 

 
向 TreeView 或 ListView 控件添加自定義信息

可以在 Windows 窗體 TreeView 控件中創建派生節點,或在 ListView 控件中創建派生項。派生使您得以添加任何所需的字段,和添加處理這些字段的自定義方法和構造函數。此功能的用途之一是將客戶對象附加到每個樹節點或列表項。雖然這裏的示例是關於 TreeView 控件的,但該方法同樣適用於 ListView 控件。

派生樹節點
創建一個從 TreeNode 類派生的新節點類,此新節點類具有一個記錄文件路徑的自定義字段。

class myTreeNode : TreeNode
{
   
public string FilePath;

   
public myTreeNode(string fp)
   {
      FilePath 
= fp;
      
this.Text = fp.Substring(fp.LastIndexOf("\\"));
   }
}

使用派生的樹節點
新的派生樹節點可用作函數調用的參數。

在下面的示例中,文本文件位置的路徑設置是 My Documents 文件夾。這樣做是因爲假定大多數運行 Windows 操作系統的計算機都包含此目錄。這還將允許具有最低系統訪問級別的用戶安全地運行應用程序。

// You should replace the bold text file 
// in the sample below with a text file of your own choosing.
// Note the escape character used (@) when specifying the path.
treeView1.Nodes.Add(new myTreeNode (System.Environment.GetFolderPath _
   (System.Environment.SpecialFolder.Personal) _
   
+ @"\TextFile.txt") );

 

如果傳遞了這個樹節點,且它的類型被聲明爲 TreeNode 類,則需要將其強制轉換爲派生類。類型轉換是從一種對象類型到另一種對象類型的顯式轉換。

protected void treeView1_AfterSelect (object sender,
System.Windows.Forms.TreeViewEventArgs e)
{
   myTreeNode myNode 
= (myTreeNode)e.Node;
   MessageBox.Show(
"Node selected is " + myNode.FilePath);
}

爲 Windows 窗體 TreeView 控件設置圖標

若要顯示樹節點旁邊的圖像,可將 ImageList 分配給父 TreeView 控件的 ImageList 屬性,然後通過引用它在 ImageList 屬性中的索引值來分配 Image。將 ImageIndex 屬性設置爲當 TreeNode 處於未選定狀態時要顯示的 Image 的索引值。同樣,將SelectedImageIndex 屬性設置爲當 TreeNode 已選定時要顯示的 Image 的索引值

  1. 設置 TreeView 控件的 ImageList 屬性爲想要使用的現有 ImageList 控件。

    這些屬性可在設計器中使用“屬性”窗口進行設置,也可在代碼中設置。

    treeView1.ImageList = imageList1;

    2.設置節點的 ImageIndex 和 SelectedImageIndex 屬性。ImageIndex 屬性確定正常和展開狀態下的節點顯示的圖像, SelectedImageIndex 屬性確定選定狀態下的節點顯示的圖像。

發佈了16 篇原創文章 · 獲贊 15 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章