我的项目中有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
和CostumeTreeView.cs
)中也有CostumeTreeView.Designer.cs
个课程,
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
中的所有标签都使用了select函数后更改
(所有方法都在一个命名空间中)
答案 0 :(得分:1)
如果TreeView控件位于不同的表单上,则需要通过表单属性或事件互相引用,以便控件可以相互通信。
我看到的另一件事是你可能不应该在draw或paint事件中设置一个属性,你在DrawNode事件中使用e.Node.Tag = myTreeView.SelectedNode.Text;
。你应该在DrawNode事件中做的唯一事情是绘制节点,其他几乎没有。
要制作引用,你的服装表单需要一个变量,只需将它传递给构造函数,如:
private MyForm mainForm;
private CostumeTreeView(MyForm mf) {
InitializeComponents();
mainForm = mf;
}
现在您可以引用TreeView控件:
private void myCostumeTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e) {
........
e.Node.Tag = mainForm.myTreeView.SelectedNode.Text;
}
同样,不需要使用DrawNode事件来设置节点的标记。您正在创建对GUI的依赖,这将在未来使维护和调试变得困难。
答案 1 :(得分:0)
创建一个协调器类并将两个树传递给协调器。让协调器在选择一棵树之后订阅,然后在选择之后,在另一棵树中执行它应该做的事情。
除非我遗漏了某些东西,否则你不需要所有者全部绘制。
答案 2 :(得分:0)
我认为最好的选择是访问TreeNode类中的Treeview属性。
e.Node.Tag = e.Node.TreeView.SelectedNode.Text;
你应该有权访问它。