有点傻问题,但长时间陷入困境.我写了两个类,一个是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);
}
Run Code Online (Sandbox Code Playgroud)
这是我的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);
}
Run Code Online (Sandbox Code Playgroud)
在使用断点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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
你在哪里称之为:
if (open.ShowDialog(this) == DialogResult.OK)
{
txtFileName.Text = open.FileName;
MytreeNodeClass treenodeClass = new MytreeNodeClass();
treenodeClass.initiatingTree(open.FileName, treeView1);
}
Run Code Online (Sandbox Code Playgroud)