首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2012-09-20 
为什么后面的代码都不能执行using Systemusing System.Collections.Genericusing System.ComponentModel

为什么后面的代码都不能执行
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的事件相关章节。

热点排行