2012-05-29 110 views
0

我在我的C#项目(Windows窗体)中使用TreeView,我有一个问题(显然:P)。我像这样填充我的TreeView:C#为什么SelectedNode.Tag为空?

void RefreshTreeView() 
{ 
    treeView1.Nodes.Clear(); 
    for (int i = 0 ; i < categories.Count ; ++i) 
    { 
     treeView1.Nodes.Add(categories[i].name); 
     for (int j = 0 ; j < categories[i].questions.Count ; ++j) 
     { 
      treeView1.Nodes[i].Nodes.Add("Pytanie nr " + categories[i].questions[j].number.ToString() 
       + " za " + categories[i].questions[j].points.ToString() + " pkt. [" 
       + (categories[i].questions[j].used ? "Przeczytane" : "Nieprzeczytane") + "]"); 
      treeView1.Nodes[i].Tag = categories[i].questions[j]; // A 
     } 
    } 
} 

在上面标有“A”的行中,我将一个Question对象附加到Node的标签。它似乎在节目作为以后工作,我能找回我的问题对象是这样的:

((Question)treeView1.Nodes[0].Tag).number 

但我想要得到的当前选择节点的标签。我试图这样做: ((Question)treeView1.SelectedNode.Tag).number 但它不起作用(标签为空)。我究竟做错了什么?以及如何获取当前选择的节点标签?

+0

我认为它,因为它是空返回null标签。在你的程序中还有其他的东西,要么将它设置为null,要么将其设置为期望值。或者你正在访问一个不同于你打算访问的对象的地方。总之'SelectedNode'返回一个'TreeNode'对象,就像'Nodes [x]'返回一样。 –

+0

另请参见:asp.net或winforms? –

回答

3

treeView1.Nodes[i].Tag是父节点的标签。

你可能要设置的子节点,这是treeView1.Nodes[i].Node[j].Tag