Простое связывание объектов с Treeview Node

Как связать объект с деревом (Winforms) node в С#?

Я подумал о чем-то вроде ExNode: Windows.Forms.Node, который может взять объект как член, кроме имени treenode... однако я не уверен, что это правильный подход.

Ответ 1

imho у вас есть несколько стратегий:

  • привязать объект любого типа в свойстве Tag любого свойства Node: downside: вы должны вернуть его в свою "родную форму", когда вы его получите, чтобы использовать его: если этот "родной" form "- это ничего, кроме типа 'Object.

  • sub-class TreeNode и добавьте общедоступные поля, общедоступные свойства или что-то еще для ваших объектов... или даже списка...... или того, что вам нужно связать с Node.

  • Предполагая, что ваши объекты одного типа, вы можете создать словарь типа: Dictionary < TreeNode, myObjectType > , создать его экземпляр и, при необходимости, сохранить TreeNode и связанные с ним объекты (объекты), которые как пара ключей/значений.

Стратегии # 1 и # 3 имеют то преимущество, что вы можете хранить связанный объект ТОЛЬКО по мере необходимости. Стратегия № 2: больше подходит для случая, когда вы ожидаете, что каждый TreeNode будет иметь связанный объект (ы).

Конечно, со стразами # 1 и # 3, вам нужно будет протестировать во время выполнения для наличия или отсутствия объекта, связанного с конкретным Node.

Стратегия № 1 - простой тест: если тег-тэг Node имеет значение Null: вы знаете, что нет объекта: if not null... и может существовать более одного типа объектов, хранящихся в поле Tag... тогда вам придется вытащить объект Tag и убедиться, что он правильный тип, как в: (в следующем примере предполагается, что открытый класс "Class1" был присвоен тегу первого Node в TreeView:

TreeNode thisNode = theTreeView.Nodes[0];
if (((thisNode.Tag != null) && (thisNode.Tag is Class1))) ... handle the object ...

Стратегия №3 немного проще, так как вы можете просто оценить, есть ли Словарь < Node, myObject > . Содержит Node в качестве ключа.

Ответ 3

Эта статья MSDN содержит некоторую полезную информацию, например:

class myTreeNode : TreeNode
{
   public string FilePath;

   public myTreeNode(string fp)
   {
      FilePath = fp;
      this.Text = fp.Substring(fp.LastIndexOf("\\"));
   }
}