2012-01-14 127 views
0

如果此方法中的邏輯是從事件處理程序進行操作,如Button_Click它完美,而是從一個方法運行此如下面時,我得到的錯誤:未將對象引用設置爲對象的實例。 (C#)

hostView.SelectedNode.Nodes.Add(newNode); 

Object reference not set to an instance of an object.

這裏是我的代碼:

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); 
     } 
    } 
} 
+0

請使用調試器,並提供有關錯誤發生的地點的詳細信息。 – 2012-01-14 11:59:55

+1

發生線路錯誤? – 2012-01-14 12:00:08

+0

他給出了問題中的所有信息。仔細閱讀。 – 2012-01-14 12:05:25

回答

1

也許沒有選擇節點:)

+0

我只是想說這個。我敢打賭,null是hostView.SelectedNode – 2012-01-14 12:01:19

+0

我想,當點擊按鈕事件處理程序時,它可能會將焦點放在其中一個節點上 – Mike 2012-01-14 12:06:58

1

大概是因爲沒有節點在當前選擇TreeView。

documentationTreeView.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); 
     } 
    } 
} 
相關問題