2

我的项目中有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选择节点时,myCostumeTreeView使用后选择功能更改所有标签(所有方法都在一个命名空间中)

4

3 回答 3

2

如果您的 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 的依赖关系,这将使将来的维护和调试变得困难。

于 2012-08-08T20:35:23.563 回答
0

我认为最好的选择是访问 TreeNode 类中存在的 Treeview 属性。

    e.Node.Tag = e.Node.TreeView.SelectedNode.Text; 

您应该有权访问它。

于 2012-11-09T14:50:20.177 回答
0

创建一个协调器类并将两棵树传递给协调器。让协调员在选择一棵树之后订阅,然后在选择之后,在另一棵树中执行它应该做的事情。

除非我遗漏了某些东西,否则您不需要所有者全部绘制。

于 2012-08-08T20:38:25.257 回答