請問如何產生TreeView比較好呢? |
尚未結案
|
marsking
一般會員 發表:6 回覆:6 積分:2 註冊:2004-06-14 發送簡訊給我 |
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 發送簡訊給我 |
|
marsking
一般會員 發表:6 回覆:6 積分:2 註冊:2004-06-14 發送簡訊給我 |
|
shieh2700
高階會員 發表:0 回覆:127 積分:100 註冊:2002-06-13 發送簡訊給我 |
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 發送簡訊給我 |
引言:感謝您所的方法~ 但是這樣還是必須先點過後才知道此目錄是否有子目錄存在~ 請問有方法可以先得知嗎? 還有~請問有方法布搜尋WINDOWS所隱藏的目錄嗎? 發表人 - marsking 於 2005/06/24 05:08:44private 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 |
shieh2700
高階會員 發表:0 回覆:127 積分:100 註冊:2002-06-13 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |