none
請問一個在程式中update treeview的問題 RRS feed

  • 問題

  • 我目的是將favorite內所有的東西
    按favorite的資料夾分佈
    放在treeview中
    但因為我事先是不知道user是開了多小層subdirectory的
    而treeview加入node的語法又是
     TreeView1.Nodes(0).Nodes(0).Add
     TreeView1.Nodes(0).Nodes(1).Add
     TreeView1.Nodes(0).Nodes(1).Nodes(0).Add
    等等
    想了二天也想不出來要怎做
    treeview有沒有function可以自動生出下一層的node的?
    我找到nextnode
    但看不懂他做甚麼用的?
    請問有沒有高人可以指點一下我怎樣做才對?
    謝謝
    2008年4月29日 上午 11:28

解答

  • 我不知道你要放的資料是怎麼樣的格式,所以我無法給你明確的答案,但通常都會是這樣:

     

    Code Snippet

    // Driver

    ...

    TreeNode root = new TreeNode();

     

    if (MyData.HasChildItems) // if child item is exist

        AddNode(root, MyData.ChildItem); // run the recurive function to add nodes.

     

    TreeView.Nodes.Add(root); // add root node to tree view.

     

    // Recurive Function.

    public AddNode(TreeNode ParentNode, MyData data)

    {

          TreeNode node = new TreeNode();

     

          if (data.HasChildItems) // if child item is exist

              AddNode(node, MyData.ChildItem); // run the recurive function.

     

          ParentNode.Nodes.Add(node); // add to parent node.

    }

     

     

     

    2008年4月29日 下午 12:16
    版主

所有回覆

  • 請用遞迴函數來做,不然就是 Nodes(0).Nodes(1).Nodes(2)......Nodes(n) 就夠你寫的了。

     

    2008年4月29日 上午 11:39
    版主
  • 請問是不是要用TreeNodeCollection?
    function中我應該傳入甚麼和return甚麼?
    有甚麼辦法可以把整個TreeNodeCollection直接add入treeview中?
    因為事前是不會知道user create了多小層的subdirectory
    所以我完全想不出來應該怎樣做...
    2008年4月29日 上午 11:50
  • 我不知道你要放的資料是怎麼樣的格式,所以我無法給你明確的答案,但通常都會是這樣:

     

    Code Snippet

    // Driver

    ...

    TreeNode root = new TreeNode();

     

    if (MyData.HasChildItems) // if child item is exist

        AddNode(root, MyData.ChildItem); // run the recurive function to add nodes.

     

    TreeView.Nodes.Add(root); // add root node to tree view.

     

    // Recurive Function.

    public AddNode(TreeNode ParentNode, MyData data)

    {

          TreeNode node = new TreeNode();

     

          if (data.HasChildItems) // if child item is exist

              AddNode(node, MyData.ChildItem); // run the recurive function.

     

          ParentNode.Nodes.Add(node); // add to parent node.

    }

     

     

     

    2008年4月29日 下午 12:16
    版主
  • 我只是要放favorite中那些子資料夾和.url 的名字而已
    我目的是把整個favorite放到treeview中
    謝謝你提供的code^^
    請問data中我要放甚麼進去?
    我可以把整個資料夾favorite都放進去嗎?
    2008年4月29日 下午 12:46
  • 這是我用的蠢方法
        Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect

            If TreeView1.SelectedNode.GetNodeCount(True) <> 0 Then
                Dim path As String = TreeView1.SelectedNode.FullPath
                TreeView1.SelectedNode.Nodes.Clear()
                Dim temp_dir As DirectoryInfo() = B.Get_SubDir(path)
                Dim temp_file As FileInfo() = B.Get_HTML(path)
                TreeView1.BeginUpdate()
                For i As Integer = 0 To (temp_dir.Length - 1)
                    TreeView1.SelectedNode.Nodes.Add(temp_dir(i).Name)
                    TreeView1.SelectedNode.Nodes.Add("")
                Next
                For j As Integer = 0 To temp_file.Length - 1
                    TreeView1.SelectedNode.Nodes.Add(temp_file(j).Name)
                Next
                TreeView1.EndUpdate()
            End If
       End Sub

     Private Sub InitializeTreeView()

            Dim path As String = ""
            Dim temp_dir As DirectoryInfo() = B.Get_SubDir(path)
            Dim temp_file As FileInfo() = B.Get_HTML(path)
            TreeView1.BeginUpdate()
            For i As Integer = 0 To (temp_dir.Length - 1)
                TreeView1.Nodes.Add(temp_dir(i).Name)
                TreeView1.Nodes(i).Nodes.Add("")
            Next
            For j As Integer = 0 To temp_file.Length - 1
                TreeView1.Nodes.Add(temp_file(j).Name)
            Next
            TreeView1.EndUpdate()
        End Sub
    2008年4月29日 下午 01:18
  • 這裏有 Sample

    Creating an Internet Explorer Favorites Control

    http://www.codeproject.com/KB/miscctrl/favoritescontrol.aspx

    2008年5月5日 上午 03:02