C# 树状视图根节点上的鼠标悬停

C# 树状视图根节点上的鼠标悬停,c#,winforms,treeview,C#,Winforms,Treeview,我有一个树状视图,其中有一个根节点。我写了如下的MouseHoverEvent private void tvwACH_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e) { string strFile = string.Empty; if (e.Node.Parent.Text == "FileHeader") { strFile =

我有一个树状视图,其中有一个根节点。我写了如下的MouseHoverEvent

   private void tvwACH_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
    {

        string strFile = string.Empty;
        if (e.Node.Parent.Text == "FileHeader")
        {
            strFile = e.Node.ToString();

            string str = strFile.Substring(10);
            StringComparison compareType = StringComparison.InvariantCultureIgnoreCase;
            string fileName = Path.GetFileNameWithoutExtension(str);
            string extension = Path.GetExtension(str);
            if (extension.Equals(".txt", compareType))
            {

                StringBuilder osb = new StringBuilder();
                objFileHeader.getFileHeader(str, out osb);
                e.Node.ToolTipText = Convert.ToString(osb);
            }
        }

    }

但是,如果我将鼠标放在根节点上,则会得到一个错误,即处理了null exceptio。如果将鼠标悬停在根节点上,则不会发生任何事情。任何人都可以帮助我。

根节点没有父节点集。因此,您不应该为根节点引用e.Node.parent.Text。 您需要使用条件语句检查此节点是否为根节点。如果为当前节点 你应该正确处理它。你也可以处理异常来解决这个问题

private void tvwACH_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
{
     string strFile = string.Empty;

     // the problem is here, root node does not have a parent
     // also added a fix
     if (e.Node.Parent != null && e.Node.Parent.Text == "FileHeader")
     {
          strFile = e.Node.ToString();

          string str = strFile.Substring(10);
          StringComparison compareType = StringComparison.InvariantCultureIgnoreCase;
          string fileName = Path.GetFileNameWithoutExtension(str);
          string extension = Path.GetExtension(str);
          if (extension.Equals(".txt", compareType))
          {
              StringBuilder osb = new StringBuilder();
              objFileHeader.getFileHeader(str, out osb);
              e.Node.ToolTipText = Convert.ToString(osb);
          }
     }
}