C# 对象作为TreeView.Nodes.Add参数?
我使用了一个C# 对象作为TreeView.Nodes.Add参数?,c#,winforms,treeview,C#,Winforms,Treeview,我使用了一个CheckedListBox来显示插件的列表。我正在使用一个EventHandler: private void myCheckedListBox_SelectedIndexChanged(object sender, EventArgs e) { myGUIUtilities.SetDescription(myCheckedListBox.SelectedItem, myRichTextBox); } 要显示某些内容。。。 这是myGUIUtilities.SetDesc
CheckedListBox
来显示插件的列表。我正在使用一个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)代码>
接受对象作为参数的
现在我想按类别对我的插件进行分类,所以我使用TreeView
和TreeNode
问题是TreeView.Nodes.Add(TreeNode节点)
只接受TreeNode
类型作为参数
实际上,我不能使用同样的SetDescription
方法,它需要Plugin
类型来获取Plugin.Description
属性
是否有方法将对象传递给TreeView.Nodes.Add(TreeNode节点)
方法?
或者另一种方法?使用树节点上的属性将对象附加到树节点上。然后你可以稍后再把它拔出来
因此您可以这样做(假设插件对象上有名称
属性)
然后您可以重写事件处理程序的开头,如下所示:
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.
您可以创建自己的继承TreeNode的树节点类。继承的类可以具有对插件的强类型引用,而不是使用tag属性。我将此方法用于具有不同类型对象、自定义上下文菜单等的相当复杂的树状视图。第一部分工作:Tag=Plugin
。但是l_插件
仍然是空的。。。变量p\u SelectedObject
是一个简单的字符串
而不是一个对象…我建议在单击节点时使用事件来处理-从已传递的中获取节点,然后将其传递给SetDescription
方法我尝试过,但仍然null
:void treeView1\u NodeMouseClick(object sender,TreeNodeUseClickEventArgs e){GUIUtilities.SetDescription((TreeView)sender.SelectedNode,this.richTextBox1);}
下面是您建议的SetDescription
方法:内部静态无效SetDescription(object p\u SelectedObject,RichTextBox p\u TextBoxDescription){AbstractEnvChecker l_Plugin=p_选择对象作为AbstractEnvChecker;if(l_Plugin==null){TreeNode selNode=p_选择对象作为TreeNode;if(selNode!=null&&selNode.Tag!=null)l_Plugin=selNode.Tag作为AbstractEnvChecker;}
在事件处理程序中使用e.Node
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.