В экземпляре объекта не задана ссылка на объект. (С #) - PullRequest
0 голосов
/ 14 января 2012

Если логика в этом методе запускается из обработчика событий, такого как 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 ]

1 голос
/ 14 января 2012

Возможно, потому что в hostView TreeView не выбран ни один узел.

В документации говорится, что свойство TreeView.SelectedNode вернет null, если ни один узел не выбран в данный момент. И так как вы объединили его в выражение, все выражение терпит неудачу, потому что в объекте null нет коллекции Nodes!

Попробуйте этот код:

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);
        }
    }
}
1 голос
/ 14 января 2012

Возможно, нет выбранных узлов:)

...