全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2821
推到 Plurk!
推到 Facebook!

請問如何產生TreeView比較好呢?

尚未結案
marsking
一般會員


發表:6
回覆:6
積分:2
註冊:2004-06-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-13 14:08:49 IP:203.73.xxx.xxx 未訂閱
public void showTree( string directoryValue , TreeNode parentNode)
                {
                        try
                        {
                                if(Directory.GetDirectories( directoryValue ).Length != 0)
                                {
                                        DirectoryInfo dir = new DirectoryInfo(directoryValue);
                                        DirectoryInfo[] infoArray = dir.GetDirectories();
                                        //string[] directoryArray = Directory.GetDirectories(directoryValue);
                                        try
                                        {
                                                if ( infoArray.Length != 0)
                                                {
                                                        foreach( DirectoryInfo info in infoArray)//string directory in directoryArray
                                                        {
                                                                TreeNode myNode = new TreeNode( info.Name);//directory
                                                                myNode.ImageIndex = 0;
                                                                parentNode.Nodes.Add( myNode );
                                                                showTree(info.FullName,myNode);//directory
                                                        }//end foreach
                                                }//end if
                                        }//end try
                                        catch
                                        {
                                        }//end catch
                                }//end if
                        }//end try
                        catch
                        {
                        }//end catch
                }//end showTre
以上是小弟用遞迴的方法取得各目錄的子目錄 然後產生node到treeview上~ 可是小弟如此做會造成開程式時過慢.. 切換硬碟槽時也會因為若此槽目錄過多而有過慢的現象~ 請問前輩們有比較好的方法嗎?
shieh2700
高階會員


發表:0
回覆:127
積分:100
註冊:2002-06-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-23 09:37:32 IP:218.161.xxx.xxx 未訂閱
可參考 Windows 檔案總管的處理方式, 使用者點選某節點時才去展開此節點的下一層節點, 這樣可加速很多, 程式也比較單純.
marsking
一般會員


發表:6
回覆:6
積分:2
註冊:2004-06-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-23 11:10:18 IP:59.104.xxx.xxx 未訂閱
引言: 可參考 Windows 檔案總管的處理方式, 使用者點選某節點時才去展開此節點的下一層節點, 這樣可加速很多, 程式也比較單純.
這樣就無法完整的知道是否有子目錄了耶... 還有~請問一下~如何避免搜尋到WINDOWS所隱藏的目錄?
shieh2700
高階會員


發表:0
回覆:127
積分:100
註冊:2002-06-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-23 13:17:33 IP:218.161.xxx.xxx 未訂閱
private void button1_Click(object sender, System.EventArgs e)
{
        treeView1.Nodes.Clear();
        TreeNode o = new TreeNode(@"C:\");
        o.Tag = new DirectoryInfo(@"C:\");
        treeView1.Nodes.Add(o);
}    private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
        DirectoryInfo di = (DirectoryInfo)e.Node.Tag;
        e.Node.Nodes.Clear();
        try
        {
                foreach(DirectoryInfo o in di.GetDirectories()){
                        TreeNode n=new TreeNode(o.Name);
                        n.Tag = o;
                        e.Node.Nodes.Add(n);
                }
                e.Node.Expand();
        }
        catch (UnauthorizedAccessException ioe)
        {
                MessageBox.Show(ioe.Message);
        }
}
發表人 - shieh2700 於 2005/06/23 13:23:29
marsking
一般會員


發表:6
回覆:6
積分:2
註冊:2004-06-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-24 05:08:09 IP:203.73.xxx.xxx 未訂閱
引言:
private void button1_Click(object sender, System.EventArgs e)
{
        treeView1.Nodes.Clear();
        TreeNode o = new TreeNode(@"C:\");
        o.Tag = new DirectoryInfo(@"C:\");
        treeView1.Nodes.Add(o);
}    private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
        DirectoryInfo di = (DirectoryInfo)e.Node.Tag;
        e.Node.Nodes.Clear();
        try
        {
                foreach(DirectoryInfo o in di.GetDirectories()){
                        TreeNode n=new TreeNode(o.Name);
                        n.Tag = o;
                        e.Node.Nodes.Add(n);
                }
                e.Node.Expand();
        }
        catch (UnauthorizedAccessException ioe)
        {
                MessageBox.Show(ioe.Message);
        }
}
發表人 - shieh2700 於 2005/06/23 13:23:29
感謝您所的方法~ 但是這樣還是必須先點過後才知道此目錄是否有子目錄存在~ 請問有方法可以先得知嗎? 還有~請問有方法布搜尋WINDOWS所隱藏的目錄嗎? 發表人 - marsking 於 2005/06/24 05:08:44
shieh2700
高階會員


發表:0
回覆:127
積分:100
註冊:2002-06-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-24 10:23:36 IP:61.229.xxx.xxx 未訂閱
private void Form1_Load(object sender, System.EventArgs e)
{
   treeView1.Nodes.Clear();
   treeView1.Nodes.Add(new TreeNode(@"C:\"));
   findSubNodes(treeView1.Nodes[0]);//加入一層子目錄
}    private void treeView1_BeforeExpand(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)
{
   findSubNodes(e.Node);
   foreach(TreeNode n in e.Node.Nodes)
      findSubNodes(n);
}    private void treeView1_BeforeSelect(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)
{
   findSubNodes(e.Node);
   foreach(TreeNode n in e.Node.Nodes)
      findSubNodes(n);
}    private void findSubNodes(TreeNode node)
{
   if(node.Nodes.Count==0)
   {
      DirectoryInfo di = new DirectoryInfo(node.FullPath);
      try
      {
         foreach(DirectoryInfo o in di.GetDirectories())
            //隱藏目錄不列入
            if(! ((o.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)) 
               node.Nodes.Add(new TreeNode(o.Name));
      }
      catch (UnauthorizedAccessException ioe)
      {
         MessageBox.Show(ioe.Message);
      }
   }
}
hwmike6979
一般會員


發表:3
回覆:6
積分:1
註冊:2005-07-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-13 09:08:31 IP:61.218.xxx.xxx 未訂閱
關於treeview, listview, 已依照您的範例實作檔案瀏覽器,但是有一個問題想請教, 就是 如何將放入listview item的值(不考慮index)重新取回? 我是用treeview作directory畫面,listview作檔案列表, 檔案選取後要提出檔名動作. 謝謝幫忙!!
系統時間:2024-05-06 10:55:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!