有点傻问题,但长时间陷入困境.我写了两个类,一个是Form(TreeDisplay类),另一个是包含buiseness逻辑(MyTreeNode类).TreeDisplay类包含用于选择文件的浏览按钮,将其传递给MyTreeNode类中的方法 initiatingTree(字符串文件名).
现在我必须将此字符串参数filename传递给MyTreeNode类.当我运行我的代码时,我选择的XML文件显示在文本框中,但不显示在树视图中.
我编写了代码的一部分,但它抛出了NullReferenceException(对象引用未设置为对象的实例).当整个代码在Form.cs中编写时,代码运行成功,但在分离业务逻辑时发生了异常.你能告诉我我哪里错了吗?
这是TreeDisplay类(我的主窗体)的Browse按钮中的代码:
if (open.ShowDialog(this) == DialogResult.OK) { txtFileName.Text = open.FileName; MytreeNodeClass treenodeClass = new MytreeNodeClass(); treenodeClass.initiatingTree(open.FileName,treeView1); }
这是我的MyTreeNode类中的initiatingTree()代码:
public class MytreeNodeClass { private readonly System.Windows.Forms.TextBox txtFileName; private TreeView treeView1; private readonly ToolStripStatusLabel toolStripStatusLabel1; public string Filename { get { return filename; } } protected string filename; public MytreeNodeClass() { } public void initiatingTree(string nameofFile,TreeView treeView1) { try { //Create XML document & load the XML file. XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(nameofFile); treeView1 = new System.Windows.Forms.TreeView(); treeView1.Nodes.Clear(); if (xmlDocument.DocumentElement != null) { TreeNode treeNodedoc = new TreeNode(xmlDocument.DocumentElement.Name); treeView1.Nodes.Add(treeNodedoc); }
在使用断点treeView1.Nodes.Clear()时,代码从此行发出并进入catch块抛出NullReferenceException.
请帮助找到异常的根本原因.谢谢.
treeView1在断点处的价值是多少?
我建议这可能为null,因为您的业务逻辑层中没有该引用.
更新了示例代码:
public void initiatingTree(string nameofFile, TreeView treeView1) { try { //Create XML document & load the XML file. XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(nameofFile); treeView1.Nodes.Clear(); if (xmlDocument.DocumentElement != null) { TreeNode treeNodedoc = new TreeNode(xmlDocument.DocumentElement.Name); treeView1.Nodes.Add(treeNodedoc); } } }
你在哪里称之为:
if (open.ShowDialog(this) == DialogResult.OK) { txtFileName.Text = open.FileName; MytreeNodeClass treenodeClass = new MytreeNodeClass(); treenodeClass.initiatingTree(open.FileName, treeView1); }