2012-07-30 4 views
0

Я пытаюсь наследовать от TreeNode добавлять собственные узлы в TreeView:В каком поле или функции я должен переопределить, чтобы узел имел текстовое описание в элементе управления TreeView при наследовании от TreeNode?

class TreeViewItem : TreeNode 
{ 
    public new string Text; 

    public override string ToString() 
    { 
     return "asd"; 
    } 
} 

Я попытался что:

TreeViewItem tvi = new TreeViewItem(); 
    tvi.Text = "asd"; 
    trv_bd_content.Nodes.Add(tvi); 

Но все еще получаю пустой узел добавляется в TreeView (узел без текста «РАС») ,
Что мне делать?

+0

Да, это не сработает. Класс TreeView по-прежнему будет использовать исходное свойство Text, он ничего не знает о вашем новом текстовом поле. Вы должны использовать свойство Text. –

+0

Просто удалите код внутри своего класса, и все будет работать. Какое поведение вы собираетесь переопределить (изменить) в своем новом классе? –

+0

У меня есть объект с коордами, и я хочу сделать, когда он добавлен в TreeView, он был показан следующим образом: public string new Text {get: return name + ":" + latitude + "/" + longitude + "/" + H ; } – Kosmos

ответ

2

Как я понимаю, вы собираетесь переопределить TreeNode, чтобы отобразить текст, который вы создаете самостоятельно. Если значения, необходимые для расчета известны перед добавлением узла в дерево, я хотел бы предложить, чтобы сделать это таким образом:

 treeView = new TreeView(); 
     var node = new TreeNode(
      string.Format("{0}: {1}/{2}/{3}", name, latitude, longitude, H)); 
     treeView.Nodes.Add(node); 

Переопределение визуального элемента просто сохранить дополнительные данные в это не очень хорошая идея. Обычно вы переопределяете визуальный элемент, чтобы изменить его рисунок или что-то связанное с его поведением как визуальный элемент.

Для сохранения соответствующих данных вы можете использовать Tag объект, в котором можно сохранить все данные (без указания цены). Таким образом, вы можете поместить экземпляр класса, содержащего ваши данные.

 node.Tag = "AnyData"; 
+0

Это не то, что я хочу. Я должен добавить свой собственный TreeViewItem ** в TreeView вместо TreeNode. Я хочу легко получить доступ ко всем необходимым полям внутри ** TreeViewItem **, просто зная, что он выбран в TreeView. Если я храню TreeView TreeNodes, я должен искать все экземпляры другого класса, чтобы найти, какой экземпляр математики объекта выбранному TreeNode в TreeView. – Kosmos

+0

. См. Мои правки. –

+0

Использование тега - хорошая идея! Спасибо, я не знал об этом. – Kosmos

1

Мне кажется, что treenode не использует ToString() для получения отображаемой информации. Вместо этого он использует свойство .Text (которое, похоже, не нравится превышать)

Вы можете установить свойство Text в своем конструкторе, если хотите.

class TreeViewItem : TreeNode 
{ 
    // public new string Text; Remove this so you don't call it 

    public TreeViewItem(){ 
     this.Text = "asd"; 
    } 

    //Treeview doesn't seem to use this 
    public override string ToString() 
    { 
     return "asd"; 
    } 
}