C#在类之间传递数据

Dar*_*ung 2 c# class

只是想知道人们会怎么做.假设我有一个类创建并填充Treeview,然后将其添加到Winform.

我有另一个依赖于Treeview中数据的类.因此,例如,当用户单击Treeview中的特定节点时,类b需要该节点保存的信息,以便它可以执行某些计算并显示结果.

简单地将对Treeview的引用传递给第二个类,或仅仅传递它需要的数据会更好吗?或者可以将Treeview设置为静态并使用事件,以便新类可以在单击节点时直接访问树视图?

谢谢.

Tom*_*son 6

我会在持有树视图的类中引发一个事件.也就是说,定义一个委托和您的类具有的事件.然后,依赖类可以订阅该事件并对事件中包含的数据进行操作.据我了解你的问题,依赖类不需要对树视图做任何事情,因此不应该知道树视图.

public delegate void YouControlHandler(int relevantData1, string relevantData2);
public class ClassContainingTreeView
{
    public event YouControlHandler TreeViewClickedEvent;
    public void OnTreeViewClicked(object sender, EventArgs)
    {
        // Handle request locally first and extract relevantData1/2
        if(TreeViewClickedEvent != null)
            TreeViewClickedEvent(relevantData1, relevantData2);
    }
}

public class DependingClass
{
     ClassContainingTreeView yourObject = new ClassContainingTreeView();

     public DependingClass()
     {
         yourObject.TreeViewClickedEvent += new YouControlHandler(EventHandler);
     }

     protected void EventHandler(int relevantData1, string relevantData2)
     {
             // Handle event
     }
}
Run Code Online (Sandbox Code Playgroud)


Ode*_*ded 5

只需传递数据.

您不希望类与UI控件紧密耦合.


顺便说一下,为什么你认为你需要使TreeView静态以便从中消耗事件?

您可以从非静态对象订阅事件.