У меня около 4-5 классов, которые вложены в суперкласс для создания указателей на наличие других классов, которые хранят и обрабатывают информацию, чтобы отображать ее в двух отдельных окнах дерева. теперь проблема у меня есть, когда я пытаюсь отобразить некоторый текст в текстовом поле, когда mouseclick eventfrom treeview инициируется событием. Я устал использовать свойство тега и назначил его указателем на дочерние узлы, но по какой-то причине он возвращает объекты только с узлами 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];
}
}
Есть ли у вас какие-либо предложения о том, как правильно его построить?
Вы не назначаете тег дочернему узлу:
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, и проверьте свойство Tag на родительском.