对象为TreeView.Nodes.Add参数?

时间:2012-06-13 12:45:45

标签: c# winforms treeview

我使用CheckedListBox来显示List Plugin。我正在使用EventHandler

private void myCheckedListBox_SelectedIndexChanged(object sender, EventArgs e)
{
    myGUIUtilities.SetDescription(myCheckedListBox.SelectedItem, myRichTextBox);
}

显示某些内容...... 这是myGUIUtilities.SetDescription方法:

internal static void SetDescription(object p_SelectedObject, RichTextBox p_TextBoxDescription)
            {
                AbstractEnvChecker l_Plugin = p_SelectedObject as AbstractEnvChecker;
                if (l_Plugin != null)
                    p_TextBoxDescription.Text = l_Plugin.Description;
            }

要显示我的插件,我只使用了CheckedListBox.Items.Add方法:

MyCheckedListBox.Items.Add(myPlugin);

接受一个对象作为参数......

现在我想按照cetgories对Plugins进行分类,因此我正在使用TreeViewTreeNode

问题是TreeView.Nodes.Add(TreeNode node)仅接受TreeNode Type作为参数。

我实际上无法使用需要SetDescription类型的同一Plugin方法来获取Plugin.Description属性...

有没有办法将对象传递给TreeView.Nodes.Add(TreeNode node)方法? 或者另一种方法呢?

2 个答案:

答案 0 :(得分:2)

使用树节点上的Tag属性将对象附加到该节点。然后你可以稍后再把它拉出来。

所以你可以这样做(假设插件对象上有Name属性)

public TreeNode AddPluginNode(TreeNode parent, AbstractEnvChecker plugin)
{
  TreeNode created = new TreeNode(plugin.Name) { Tag = plugin };
  parent.Nodes.Add(created);
  return created;
}

然后你可以重写事件处理程序的开头:

AbstractEnvChecker l_Plugin = p_SelectedObject as AbstractEnvChecker;
if(l_Plugin == null)
{
  TreeNode selNode = p_SelectedObject as TreeNode;
  if(selNode != null && selNode.Tag != null)
    l_Plugin = selNode.Tag as AbstractEnvChecker;
}
//might still be null in the future if you start using Tags for other types.

答案 1 :(得分:0)

您可以创建自己继承TreeNode的树节点类。您继承的类可以具有对插件的强类型引用,而不是使用tag属性。我将此方法用于具有不同类型对象,自定义上下文菜单等的相当复杂的树视图。