0

我的TreeView控件正在显示某些选定硬盘驱动器的结构。在我的addToParentNode中,我在树视图展开后拨打电话。但是,当我将节点从一种方法传递到另一种方法时,会引发“对象引用未设置为对象的实例”异常。

void addToParentNode(TreeNode childNodes)
{
    DirectoryInfo getDir = new DirectoryInfo(childNodes.Tag.ToString());
    DirectoryInfo[] dirList = getDir.GetDirectories();
    foreach (DirectoryInfo dir in dirList)
    {
        TreeNode parentNode = new TreeNode();
        parentNode.Text = dir.Name;
        parentNode.Tag = dir.FullName;
        childNodes.Nodes.Add(parentNode);
    }
}

private void tv_fileExplore_AfterExpand(object sender, TreeViewEventArgs e)
{
    foreach (TreeNode item in e.Node.Nodes)
    {
        addToParentNode(item);
    }
}

有人可以指出我正确的方向吗?

4

2 回答 2

2

根据您对问题的评论,Tag树节点的属性是null.

您正在为方法null中的每个树节点分配一个非值addToParentNode,但是在某个地方,必须有一个开始,并且您必须创建一个根节点。因此,该根节点显然Tag仍将其属性设置为null.

于 2012-08-26T13:18:59.877 回答
0

没有足够的上下文,但您可以添加一些保护措施,并处理异常(只有在您想处理它们时才捕获它们。例如,您可以向 TreeNode 添加一个工具提示以通知用户该节点有什么问题,

 void addToParentNode(TreeNode childNodes) 
    { 
        if ((childNodes != null) && (childNodes.Tag != null))
        {
            DirectoryInfo getDir = null;
            try {
               getDir = new DirectoryInfo(childNodes.Tag.ToString()); 
            }
            catch(SecurityException) {
                 childNodes.ToolTipText = "no access";
            }
            catch(PathTooLongException) {
                childNodes.ToolTipText = "path more then 254 chars";
            }
            catch(ArgumentException)
            {
               childNodes.ToolTipText = "huh?";
            }
            if (getDir!=null) && (!getDir.Exists) return;
            DirectoryInfo[] dirList = null;
            try {
               dirList = getDir.GetDirectories(); 
            }
            catch(UnauthorizedException) {
                childNodes.ToolTipText = "no access";
            }
            catch(SecurityException)
            {
                 childNodes.ToolTipText = "no access";
            } 
            if (dirList == null) return;
            foreach (DirectoryInfo dir in dirList) 
            { 
                TreeNode parentNode = new TreeNode(); 
                parentNode.Text = dir.Name; 
                parentNode.Tag = dir.FullName; 
                childNodes.Nodes.Add(parentNode); 
            } 
       }
    } 
于 2012-08-26T12:24:15.270 回答