我使用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
进行分类,因此我正在使用TreeView
和TreeNode
。
问题是TreeView.Nodes.Add(TreeNode node)
仅接受TreeNode
Type作为参数。
我实际上无法使用需要SetDescription
类型的同一Plugin
方法来获取Plugin.Description
属性...
有没有办法将对象传递给TreeView.Nodes.Add(TreeNode node)
方法?
或者另一种方法呢?
答案 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属性。我将此方法用于具有不同类型对象,自定义上下文菜单等的相当复杂的树视图。