我的项目中有 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
的节点时,使用after select 函数更改myCostumeTreeView
中的所有标签
(所有方法都在一个命名空间中)
最佳答案
如果您的 TreeView 控件位于不同的窗体上,则它们需要通过窗体属性或事件相互引用,以便控件可以相互通信。
我看到的另一件事是,您可能不应该在绘制或绘制事件中设置属性,而您正在使用 e.Node.Tag = myTreeView.SelectedNode.Text;
在 DrawNode 事件中。您应该在 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 的依赖,这将使将来的维护和调试变得困难。
关于c# - 如何使用 TreeView.AfterSelect 和 TreeView.DrawNode 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11871697/