gpt4 book ai didi

c# - 如何使用 TreeView.AfterSelect 和 TreeView.DrawNode 方法?

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:56 24 4
gpt4 key购买 nike

我的项目中有 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.csCostumeTreeView.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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com