我的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);
}
}
有人能指出我正确的方向吗?
答案 0 :(得分:2)
根据您对问题的评论,树节点的Tag
属性为null
。
您正在为null
方法中的每个树节点分配一个非addToParentNode
值,但在某处,必须有一个开始,您必须创建一个根节点。因此,根节点显然仍将其Tag
属性设置为null
。
答案 1 :(得分: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);
}
}
}