你调用的对象是空的。 (C#)

时间:2012-01-14 11:57:45

标签: c# .net windows nullreferenceexception

如果此方法中的逻辑是从Button_Click之类的事件处理程序运行的,那么它可以正常工作,但是,当从下面的方法运行它时,我会收到错误:

hostView.SelectedNode.Nodes.Add(newNode);
  

对象引用未设置为对象的实例。

这是我的代码:

private void SetupHostTree()
{
    // Set internal host names
    using (var reader = File.OpenText("Configuration.ini"))
    {
        List<string> hostnames = ParseInternalHosts(reader).ToList();
        foreach (string s in hostnames)
        {
            TreeNode newNode = new TreeNode(s);
            hostView.SelectedNode.Nodes.Add(newNode);

            string title = s;
            TabPage myTabPage = new TabPage(title);
            myTabPage.Name = s;
            tabControl1.TabPages.Add(myTabPage);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

也许没有选定的节点:)

答案 1 :(得分:1)

可能是因为hostView TreeView中没有选择任何节点。

documentation表示当前未选择任何节点时,TreeView.SelectedNode属性将返回null。由于您已将其组合到表达式中,因此整个表达式失败,因为Nodes对象上没有null个集合!

试试这段代码:

private void SetupHostTree()
{
    // Set internal host names
    using (var reader = File.OpenText("Configuration.ini"))
    {
        List<string> hostnames = ParseInternalHosts(reader).ToList();
        foreach (string s in hostnames)
        {
            // Ensure that a node is currently selected
            TreeNode selectedNode = hostView.SelectedNode;
            if (selectedNode != null)
            {
                TreeNode newNode = new TreeNode(s);
                selectedNode.Nodes.Add(newNode);
            }
            else
            {
                // maybe do nothing, or maybe add the new node to the root
            }

            string title = s;
            TabPage myTabPage = new TabPage(title);
            myTabPage.Name = s;
            tabControl1.TabPages.Add(myTabPage);
        }
    }
}