如何为具有多个类和属性的treeview节点分配标记

时间:2014-12-22 11:21:17

标签: c# winforms treeview

我有大约4-5个类,它们与超类嵌套,其他类的创建保持指针保存和orginze信息,以便在2个单独的树视图窗口中显示它。现在我遇到的问题是当我尝试在treeview中触发事件触发事件时,在文本框中显示一些文本。我厌倦了使用tag属性并为其指定了指向子节点的指针,但由于某种原因,它只返回带有rootclases节点而不是子节点的对象。

IMG http://i61.tinypic.com/2cqbjf9.png[/IMG]

这是我分配对象标签的部分:

foreach (HostClass ptr in HostClassHolderlist)
{
 subpcirootnode = pcirootnode.Nodes.Add("PCI CONFIG REGISTERS");

 foreach (KeyValuePair<string, UInt32> entry in ptr.PrintHT)
 {
        treeView1.CheckBoxes = true;
        uint tmp = entry.Value;
        subpcirootnode.Tag = ptr;//hostclass pointer
        subpcirootnode.Nodes.Add(entry.Key.ToString() + ":  0x" + tmp.ToString("X"));
  }
}

这是我收到错误的部分:

   void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    //handler for mouse click,this method show on textbox info on field
    {     
        try
        {
            int num = e.Node.Text.IndexOf(" ");
            String key = e.Node.Text.Substring(0,num-1);
            //MessageBox.Show(key);
            HostClass ptr = (HostClass)e.Node.Tag; // <-this is the tricky part of my code!!
            textBox1.Text = ptr.PcidescDict[key];
         }
     }

您对如何正确构建它有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您没有为子节点分配标记:

subpcirootnode.Nodes.Add(entry.Key.ToString() + ":  0x" + tmp.ToString("X"));

所以改为:

TreeNode tn = new TreeNode(entry.Key.ToString() + ":  0x" + tmp.ToString("X"));
tn.Tag = ptr;
subpcirootnode.Nodes.Add(tn);

对您的代码不够了解,但所有子节点都获得相同的类引用,因此不清楚它有什么好处。只需检查e.Node.Parent类是否为null,您就可以获得相同的信息,并检查父级的Tag属性。