一个对象的适配器,实现TreeNode接口到TreeNode的TreeView

本文关键字:TreeNode 接口 TreeView 实现 适配器 一个对象 | 更新日期: 2023-09-27 17:49:43

假设

public interface ITreeNode
    {
        string Text { get; set; }
        IEnumerable<ITreeNode> Nodes { get; set; }
    }

假设我们有树的第一个节点,其中每个对象都实现了该接口。

在TreeView中显示树(ITreeNode的树)的简单方法是什么?

换句话说,我如何使整个树的ITreeNode为System.Windows.Forms.TreeView的System.Windows.Forms.TreeNode ?

请注意:上面的接口只是为了得到一个想法,如果有一个替代的方法来适应树节点的某些类型的树节点为TreeView存在,请建议

一个对象的适配器,实现TreeNode接口到TreeNode的TreeView

Windows窗体TreeView将只在类型TreeNode上操作,所以如果您想使用ITreeNode的控件实例,则需要进行某种转换。我建议使用如下所示的扩展方法:

public static class TreeViewExtensions {
    public static void Add(this TreeNodeCollection nodes, ITreeNode node) {
        TreeNode treeNode = new TreeNode(node.Text);
        foreach (ITreeNode child in node.Nodes) treeNode.Nodes.Add(child);
        nodes.Add(treeNode);
    }
}

然后你可以把你的节点(和所有的子节点,和所有的子节点,等等)添加到TreeView控件,没有大惊小怪:

myTreeView.Nodes.Add(myInstanceOfITreeNode);

话虽如此,使用外部接口的对象和然后将转换为TreeNode表示并没有太大的优势——您还不如直接使用实际的节点类。