如何使用 TreeView.AfterSelect 和 TreeView.DrawNode 方法
本文关键字:TreeView DrawNode 方法 AfterSelect 何使用 | 更新日期: 2024-11-07 11:58:46
我的项目中有MyForm.cs, MyForm.Designer.cs
文件,MyForm.Designer.cs
我就是这样做的:
private System.Windows.Forms.TreeView myTreeView;
this.myTreeView = new System.Windows.Forms.TreeView();
.........
this.myTreeView.AfterSelect +=
new TreeViewEventHandler(this.myTreeView_AfterSelect);
在这样的MyForm.cs
中:
private void myTreeView_AfterSelect(object sender, TreeViewEventArgs e)
{
//........;
}
我也在其他文件(CostumeTreeView.cs
和CostumeTreeView.Designer.cs
)中CostumeTreeView
类,在 CostumeTreeView.Designer.cs
我确实喜欢这样:
private System.Windows.Forms.TreeView myCostumeTreeView
this.myCostumeTreeView = new System.Windows.Forms.TreeView();
...........
this.myCostumeTreeView.DrawMode =
System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll;
this.myCostumeTreeView.DrawNode +=
new DrawTreeNodeEventHandler(this.myCostumeTreeView_DrawNode);
在CostumeTreeView.cs
:
private void myCostumeTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
........
//Here is the problem, myTreeView isn't seen here
e.Node.Tag = myTreeView.SelectedNode.Text;
}
我需要当选择myTreeView
节点时,myCostumeTreeView
中的所有标签都使用选择功能进行更改(所有方法都在一个命名空间中)
如果 TreeView 控件位于不同的窗体上,则它们需要通过窗体属性或事件相互引用,以便控件可以相互通信。
我看到的另一件事是,您可能不应该在绘制或绘制事件中设置属性,这是您在 DrawNode 事件中使用e.Node.Tag = myTreeView.SelectedNode.Text;
执行的。 在 DrawNode 事件中,您唯一应该做的就是绘制节点,其他很少。
为了进行引用,您的服装形式需要一个变量,只需将其传递到构造函数中,如下所示:
private MyForm mainForm;
private CostumeTreeView(MyForm mf) {
InitializeComponents();
mainForm = mf;
}
现在,您可以引用树视图控件:
private void myCostumeTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e) {
........
e.Node.Tag = mainForm.myTreeView.SelectedNode.Text;
}
同样,不需要使用 DrawNode 事件来设置节点的标记。 您正在创建对 GUI 的依赖关系,这将使将来的维护和调试变得困难。
我认为最好的选择是访问TreeNode类中存在的Treeview属性。
e.Node.Tag = e.Node.TreeView.SelectedNode.Text;
你应该有访问权限。
创建一个协调器类并将两个树传递给协调器。让协调器在选择一棵树后订阅,并在选择后订阅,在另一棵树中执行它应该做的事情。
除非我错过了什么,否则你不需要所有者绘制它。