Как назначить теги для узлов древовидной структуры с несколькими классами и свойствами

1

У меня около 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];
         }
     }

Есть ли у вас какие-либо предложения о том, как правильно его построить?

  • 0
    Разместите код, в котором вы присваиваете значение и пытаетесь его прочитать. То, что вы пытаетесь сделать, должно работать нормально.
  • 0
    код немного длинный (около 3000 строк с несколькими классами), я мог бы показать часть в моем коде, в которой я пытаюсь прочитать значение тега и получить исключение?
Теги:
winforms
treeview

1 ответ

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, и проверьте свойство Tag на родительском.

  • 0
    Я изменил его, чтобы использовать e.Node.Parent вместо этого, спасибо за ваш совет, иначе я бы не подумал об этом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню