日期:2014-05-20  浏览次数:20952 次

未将对象引用设置到对象的实例是怎么回事啊?
private   void   treeView1_BeforeExpand(object   sender,   System.Windows.Forms.TreeViewCancelEventArgs   e)
{
//获得各个子目录的信息
//获取发出信息的节点,这段程序在磁盘节点展开之前调用,
//能够读出该节点所有的子节点,以及它的每一个子节点的子节点。
TreeNode   node=e.Node;
//设置它为TreeView的当前节点
this.treeView1.SelectedNode=node;
string   path=node.FullPath;
string   []dirs=null;
try
{
//获得当前节点所有的子节点
dirs=Directory.GetDirectories(path);
}
catch(Exception   error)
{
//不做异常处理
}
if(dirs!=null)
{
//为每一个当前节点的子节点添加子节点
for(int   j=0;j <dirs.Length;j++)
{
//如果当前节点的子节点数为0,则为它添加子节点
//否则,说明已经添加或者没有子目录
if(node.Nodes[j].Nodes.Count==0)
{
//调用函数为子节点添加子节点
addDirectory(node.Nodes[j],dirs[j]);
}
}
}
}
//addDirectory()方法为一个指定的子节点添加子节点。
private   void   addDirectory(TreeNode   node,string   path)
{
string[]dirs=null;
try
{
dirs=Directory.GetDirectories(path);
}
catch(Exception   error)
{
//忽略
}
for(int   j=0;j <dirs.Length;j++)
{
//添加新的子节点
TreeNode   nodeNew=new   TreeNode(dirs[j].ToString().Substring(dirs[j].ToString().LastIndexOf( "\\ ")+1));
//设置不选定状态下的图标
nodeNew.ImageIndex=2;
//设置打开状态下的图标
nodeNew.SelectedImageIndex=0;
node.Nodes.Add(nodeNew);
}
}

------解决方案--------------------
实例没初始化(或者初始化失败)就直接使用了呗
------解决方案--------------------
有空值
------解决方案--------------------
private void addDirectory(TreeNode node,string path)
{
string[]dirs=null;
try
{
dirs=Directory.GetDirectories(path);
}
catch(Exception error)
{
//忽略
}
//此处是否要加判断 dirs 是否为Null?
// if(dirs==null)
// return;
for(int j=0;j <dirs.Length;j++)
{
//添加新的子节点
TreeNode nodeNew=new TreeNode(dirs[j].ToString().Substring(dirs[j].ToString().LastIndexOf( "\\ ")+1));
//设置不选定状态下的图标
nodeNew.ImageIndex=2;
//设置打开状态下的图标
nodeNew.SelectedImageIndex=0;
node.Nodes.Add(nodeNew);
}
}

------解决方案--------------------
就是有某个实例在没有new之前就被使用了,你可以用F10来单步调试,看看是哪出了问题。
------解决方案--------------------
这样的提示一般两种情况,要么是该实例化的对象没有实例化,要么是对象应用过程中出现了null,没有捕获继续进行处理。
断点跟一遍查查看
------解决方案--------------------
再你程序的位置打个断点 起始
单步 跟踪看 那里的出的错。

------解决方案--------------------
:)