0

我正在使用 a来CheckedListBox显示. 我正在使用:ListPluginEventHandler

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);

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

现在我想Plugins按 cetgories 对我进行分类,所以我使用TreeViewand TreeNode

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

而且我实际上不能使用SetDescription需要Plugin类型来获取Plugin.Description属性的相同方法......

有没有办法将对象传递给TreeView.Nodes.Add(TreeNode node)方法?或者另一种方式来做到这一点?

4

2 回答 2

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.
于 2012-06-13T13:12:26.960 回答
0

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

于 2012-06-28T08:20:34.300 回答