为什么后面的代码都不能执行

duanzming1122 2012-09-16 06:49:54
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;
}

}
}
...全文
207 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
嘶吼的蚂蚁 2012-09-17
  • 打赏
  • 举报
回复
不是写了方法就会运行,你都没有触发机制。
上体育课的时候,你们体育老师先叫你们集合,你们执行了集合这个指令。他没叫你们跑步,你们会去跑步吗?
yjlbukn 2012-09-17
  • 打赏
  • 举报
回复
看你的代码应该是实现异步装载【电脑->磁盘->{文件夹->文件}】的这个过程,并在treeView1控件上展示;
所以你需要在treeView1控件上指定对应的事件来挂接treeView1_BeforeExpand
和treeView1_AfterCollapse两个事件,这两个事件是响应树的展开前和展开动作。这样就能进一步运行。

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

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

聖傑 2012-09-17
  • 打赏
  • 举报
回复
比如说吧

protected void Page_Load(object sender, EventArgs e)
{
DisplayAll();//这样就调用了你自己写的方法

}
//你在下面有个方法
private void DisplayAll()
{
//方法体
}
chinajhl1 2012-09-17
  • 打赏
  • 举报
回复
Form2的Load事件中调用
yonglaixiazaide 2012-09-17
  • 打赏
  • 举报
回复
这个 小白
xugan666 2012-09-17
  • 打赏
  • 举报
回复
方法都是没有调用,如何往下面走?
ODecO 2012-09-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

那该怎么改下额
[/Quote]


你想调用哪个函数,就对应的事件里面调用呀。
duanzming1122 2012-09-17
  • 打赏
  • 举报
回复
那该怎么改下额
fsstolw 2012-09-17
  • 打赏
  • 举报
回复
呵呵,如果你的程序会运行到那之后,就失控了喔!
CrazyCode1981 2012-09-16
  • 打赏
  • 举报
回复
default:
{
ShowDrives(node);
break;
}

}
}
如果你以为运行到这里 那么就是面向过程的了。
王子文龙 2012-09-16
  • 打赏
  • 举报
回复
虽然C#是面向对象,但具体内部也是面向过程,当你实例化这个类的时候,运行的是构造函数里的,所以执行完构造函数就不往下运行了
duanzming1122 2012-09-16
  • 打赏
  • 举报
回复
怎么调用额,想不出来额。。。
聖傑 2012-09-16
  • 打赏
  • 举报
回复
你的form事件里又没有调用别的方法,肯定只运行到那儿

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧