C# 如何使用TreeView.AfterSelect和TreeView.DrawNode方法?
我的项目中有C# 如何使用TreeView.AfterSelect和TreeView.DrawNode方法?,c#,.net,winforms,treeview,C#,.net,Winforms,Treeview,我的项目中有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 TreeView
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);
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);
在MyForm.cs
中,如下所示:
private void myTreeView_AfterSelect(object sender, TreeViewEventArgs e)
{
//........;
}
另外,我在其他文件(customtreeview.cs
和customtreeview.Designer.cs
)中有customtreeview
类
customtreeview.Designer.cs
我喜欢这样:
private System.Windows.Forms.TreeView myTreeView;
this.myTreeView = new System.Windows.Forms.TreeView();
.........
this.myTreeView.AfterSelect +=
new TreeViewEventHandler(this.myTreeView_AfterSelect);
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);
在客户树视图.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的节点时,使用after select功能更改MyStudMetreeView中的所有标记
(所有方法都在一个命名空间中)如果您的TreeView控件位于不同的窗体上,则它们需要通过窗体属性或事件相互引用,以便控件可以相互通信
我看到的另一件事是,您可能不应该在draw或paint事件中设置属性,您正在使用
e.Node.Tag=myTreeView.SelectedNode.Text代码>在DrawNode事件中。在DrawNode事件中,您应该做的唯一一件事是绘制节点,其他事情很少
要进行引用,您的costment表单需要一个变量,只需将其传递给构造函数,如下所示:
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上创建一个依赖项,这将使将来的维护和调试变得困难。创建一个协调器类,并将这两个树传递给协调器。让协调器在选择一棵树后订阅,并在选择后打开,在另一棵树中执行它应该执行的操作
除非我遗漏了什么,否则您不需要全部绘制。我认为最好的选择是访问TreeNode类中的Treeview属性
e.Node.Tag = e.Node.TreeView.SelectedNode.Text;
你应该有权访问它。e.Node.Tag=myTreeView.SelectedNode.Text
-这只是DrawNode方法的一部分,我真的需要它,因为我正在完全更改drawingTreeView
和CustomerTreeview
的格式不同,如何使用事件?你能给我举个例子吗?如何将myTreeView.SelectedNode.Text
从一个控件返回到另一个控件(从TreeView
到custometereview
)@Steven更新了如何将引用从父窗体传递到另一个窗体的示例。