我有大约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];
}
}
您对如何正确构建它有什么建议吗?
答案 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属性。