Как связать объект с деревом (Winforms) node в С#?
Я подумал о чем-то вроде ExNode: Windows.Forms.Node, который может взять объект как член, кроме имени treenode... однако я не уверен, что это правильный подход.
Как связать объект с деревом (Winforms) node в С#?
Я подумал о чем-то вроде ExNode: Windows.Forms.Node, который может взять объект как член, кроме имени treenode... однако я не уверен, что это правильный подход.
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 в качестве ключа.
Вы ищете что-то вроде свойства Tag на TreeNodes? Он может содержать любой объект.
http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.tag.aspx
Эта статья MSDN содержит некоторую полезную информацию, например:
class myTreeNode : TreeNode
{
public string FilePath;
public myTreeNode(string fp)
{
FilePath = fp;
this.Text = fp.Substring(fp.LastIndexOf("\\"));
}
}