读书人

为何后面的代码都不能执行

发布时间: 2012-09-20 09:36:50 作者: rapoo

为什么后面的代码都不能执行
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
TreeNode root = new TreeNode();
root.Text = "我的电脑";
root.Tag = "Root";

this.treeView1.Nodes.Add(root);

TreeNode fakeNode = new TreeNode();

root.Nodes.Add(fakeNode);
}//只能运行到这里 求解释

private void ShowDrives(TreeNode node)
{
DriveInfo[] drives = DriveInfo.GetDrives();

foreach (DriveInfo drive in drives)
{
TreeNode n = new TreeNode();
n.Text = drive.Name;
n.Tag = drive;

if (drive.IsReady && (drive.RootDirectory.GetDirectories().Length > 0 || drive.RootDirectory.GetFiles().Length > 0))
{
TreeNode fakeNode = new TreeNode();
n.Nodes.Add(fakeNode);
}

node.Nodes.Add(n);
}
}

private void ShowRootDirectoriesAndFiles(TreeNode node)
{
DriveInfo drive = node.Tag as DriveInfo;

if (drive != null)
{
DirectoryInfo[] directories = drive.RootDirectory.GetDirectories();
FileInfo[] files = drive.RootDirectory.GetFiles();

BindDirectoriesAndFiles(node, directories, files);
}
}

private void ShowDirectoriesAndFiles(TreeNode node)
{
DirectoryInfo directory = node.Tag as DirectoryInfo;

if (directory != null)
{
DirectoryInfo[] directories = directory.GetDirectories();
FileInfo[] files = directory.GetFiles();

BindDirectoriesAndFiles(node, directories, files);
}
}

private void BindDirectoriesAndFiles(TreeNode node, DirectoryInfo[] directories, FileInfo[] files)
{
foreach (DirectoryInfo dir in directories)
{
TreeNode n = new TreeNode();
n.Text = dir.Name;
n.Tag = dir;

try
{
if (dir.GetDirectories().Length > 0 || dir.GetFiles().Length > 0)
{
TreeNode fakeNode = new TreeNode();
n.Nodes.Add(fakeNode);
}
}
catch
{
}

node.Nodes.Add(n);
}

foreach (FileInfo file in files)
{
TreeNode n = new TreeNode();
n.Text = file.Name;
n.Tag = file;

node.Nodes.Add(n);
}
}


private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)


{
e.Node.Nodes.Clear();

DisposeNodes(e.Node);
}

private void treeView1_AfterCollapse(object sender, TreeViewEventArgs e)
{
int fake = e.Node.Nodes.Count;

e.Node.Nodes.Clear();
if (fake > 0)
{
TreeNode fakeNode = new TreeNode();
e.Node.Nodes.Add(fakeNode);
}
}

private void DisposeNodes(TreeNode node)
{

switch (node.Tag.GetType().ToString().Split('.')[node.Tag.GetType().ToString().Split('.').Length - 1])
{
case "DriveInfo":
{
ShowRootDirectoriesAndFiles(node);
break;
}
case "DirectoryInfo":
{
ShowDirectoriesAndFiles(node);
break;
}
case "FileInfo":
{
FileInfo file = node.Tag as FileInfo;
TreeNode n = new TreeNode();
n.Text = file.Name;
n.Tag = file;

node.Nodes.Add(n);
break;
}
default:
{
ShowDrives(node);
break;
}

}
}

[解决办法]
比如说吧

C# code
protected void Page_Load(object sender, EventArgs e)        {            DisplayAll();//这样就调用了你自己写的方法                   }//你在下面有个方法private void DisplayAll()        {            //方法体        }
[解决办法]
看你的代码应该是实现异步装载【电脑->磁盘->{文件夹->文件}】的这个过程,并在treeView1控件上展示;
所以你需要在treeView1控件上指定对应的事件来挂接treeView1_BeforeExpand
和treeView1_AfterCollapse两个事件,这两个事件是响应树的展开前和展开动作。这样就能进一步运行。

还有就是你所说的运行了Form2这个函数就不运行了,这是正常的,因为初始化只会运行装载程序以及初始化(构造函数,公有变量,静态常量的代码都是会被初始化的)程序。装载成功之后,用户操作的时候才会运行事件响应程序,很显然,要么你没有在控件上挂接事件,要么你没有去点击树节点并展开该节点。

如果还是不懂的话,请看看winform的事件相关章节。

读书人网 >C#

热点推荐