我使用CheckedListBox来显示Plugin的List。我使用的是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类型作为参数。
实际上,我不能使用需要Plugin类型来获取Plugin.Description属性的相同SetDescription方法……
有没有办法将对象传递给TreeView.Nodes.Add(TreeNode node)方法?或者是另一种方式呢?
发布于 2012-06-13 21:12:27
使用树节点上的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-28 16:20:34
您可以创建自己的继承TreeNode的树节点类。继承的类可以具有对插件的强类型引用,而不是使用tag属性。我将此方法用于具有不同类型对象、自定义上下文菜单等的相当复杂的treeview。
https://stackoverflow.com/questions/11015120
复制相似问题