using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Collections; using Microsoft.Win32; using System.IO; using System.Xml.XPath; using System.Xml; using System.Xml.Xsl; using System.Text.RegularExpressions; using ConsoleApplication1; using System.Drawing.Imaging; namespace ReaderDir { public partial class Form1 : Form { Hashtable keytable = new Hashtable(); DriveInfo[] dir = DriveInfo.GetDrives(); public Form1() { InitializeComponent(); keytable.Add(@"d\",dir[1].RootDirectory); for (int i = 0; i < dir.Length; i++) { keytable.Add(dir[i].RootDirectory, dir[i].RootDirectory); } } private void button1_Click(object sender, EventArgs e) { foreach (DictionaryEntry i in keytable) { DirectoryInfo info = new DirectoryInfo(Convert.ToString(i.Value)); TreeNode node = treeView1.Nodes.Add(info.FullName); addnode(node, info); } } /// <summary> /// ラヤシコソエーノ /// </summary> /// <param name="treeNodeCollection"></param> /// <param name="info"></param> private void addnode(TreeNode treeNodeCollection, DirectoryInfo info) { TreeNode node = null; try { foreach (FileInfo f in info.GetFiles()) { node = treeNodeCollection.Nodes.Add(f.Name); } foreach (DirectoryInfo name in info.GetDirectories()) { node = treeNodeCollection.Nodes.Add(name.Name); }
根据9楼的方法确实可以实现。 Public Class Form1 Private WithEvents TestTree As TreeView Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TestTree = New TreeView For i As Integer = 0 To 20 Dim n As New TreeNode("Node" + i.ToString) If i Mod 2 = 0 Then n.Nodes.Add("Delete") TestTree.Nodes.Add(n) Next Me.Controls.Add(TestTree) TestTree.Dock = DockStyle.Fill End Sub Private Sub TestTree_BeforeExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TestTree.BeforeExpand If e.Node.Nodes.Count > 0 Then e.Node.Nodes.Clear() For j As Integer = 0 To 5 e.Node.Nodes.Add("SubNode" + j.ToString) Next End If End SubEnd Class
因为程序在加载的时候不能把所有的节点都生成,只有在点击的时候才动态生成,但是如果知道某节点有子节点的话,也得显示前面的+号,要不就不知道该节点是否有子节点! 好生郁闷,高手给说一下??????????????????????????????????
{
e.Node.Nodes.Clear();
e.Node.Nodes.Add("aaaa");
e.Node.Nodes.Add("bbbb");
}要想前面有"+", 则必须有子节点,随便给个, 在展开前清除, 再动态添加.
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using Microsoft.Win32;
using System.IO;
using System.Xml.XPath;
using System.Xml;
using System.Xml.Xsl;
using System.Text.RegularExpressions;
using ConsoleApplication1;
using System.Drawing.Imaging;
namespace ReaderDir
{
public partial class Form1 : Form
{
Hashtable keytable = new Hashtable();
DriveInfo[] dir = DriveInfo.GetDrives();
public Form1()
{
InitializeComponent();
keytable.Add(@"d\",dir[1].RootDirectory);
for (int i = 0; i < dir.Length; i++)
{
keytable.Add(dir[i].RootDirectory, dir[i].RootDirectory);
} } private void button1_Click(object sender, EventArgs e)
{
foreach (DictionaryEntry i in keytable)
{
DirectoryInfo info = new DirectoryInfo(Convert.ToString(i.Value));
TreeNode node = treeView1.Nodes.Add(info.FullName);
addnode(node, info); }
} /// <summary>
/// ラヤシコソエーノ
/// </summary>
/// <param name="treeNodeCollection"></param>
/// <param name="info"></param>
private void addnode(TreeNode treeNodeCollection, DirectoryInfo info)
{
TreeNode node = null;
try
{
foreach (FileInfo f in info.GetFiles())
{
node = treeNodeCollection.Nodes.Add(f.Name);
}
foreach (DirectoryInfo name in info.GetDirectories())
{
node = treeNodeCollection.Nodes.Add(name.Name);
}
}
catch (Exception ex) { } } private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
{
TreeNodeCollection nodes = e.Node.Nodes; foreach (TreeNode node in nodes)
{ if (node.Nodes.Count == 0)
{
addnode(node, new DirectoryInfo(node.FullPath));
} }
}
}
}
Public Class Form1 Private WithEvents TestTree As TreeView Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TestTree = New TreeView
For i As Integer = 0 To 20
Dim n As New TreeNode("Node" + i.ToString)
If i Mod 2 = 0 Then n.Nodes.Add("Delete")
TestTree.Nodes.Add(n)
Next Me.Controls.Add(TestTree)
TestTree.Dock = DockStyle.Fill
End Sub Private Sub TestTree_BeforeExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TestTree.BeforeExpand
If e.Node.Nodes.Count > 0 Then
e.Node.Nodes.Clear()
For j As Integer = 0 To 5
e.Node.Nodes.Add("SubNode" + j.ToString)
Next
End If
End SubEnd Class