在usercontrols c#之间传递数据

时间:2017-06-23 08:06:39

标签: c# winforms user-controls report

我现在有一些关于这个问题的解决方案但是,我无法用它们来解决我的问题。 我有两个用户控件:

第一个创建一个Report对象,第二个显示它。我有一个主要的表格,可以比较两个控件。

这两个控件是在DLL中创建的,所以我将它们添加到主体表单中,如下所示:

//ADDS THE FIRST CONTROL TO THE PANEL CONTROL

      myDll.controlUserReport userControlA = new myDll.controlUserReport();
      panelControl1.Controls.Add(userControlA);
      userControlA.Dock = DockStyle.Left;

//ADDS THE SECOND CONTROL TO THE PANEL CONTROL

      myDll.controlDocViewer userControlB = new myDll.controlDocViewer();
      panelControl1.Controls.Add(userControlB);
      userControlB.Dock = DockStyle.Fill;

如何将单击按钮时在第一个控件controlUserReport中创建的Report对象传递给显示该对象的其他用户控件controlDocViewer

enter image description here

2 个答案:

答案 0 :(得分:4)

你应该为此使用事件。在UserControlA声明事件:

//Declare EventHandler outside of class
public delegate void MyEventHandler(object source, Report r);

public class UserControlA
{
    public event MyEventHandler OnShowReport;

    private void btnShowReport_Click(object sender, Report r)
    {
         OnShowReport?.Invoke(this, this.Report);
    }
}

UserControlB订阅该活动并显示报告:

public class UserControlB
{
    // Do it in Form_Load or so ...
    private void init()
    {
       userControlA.OnShowReport += userControlA_OnShowReport;
    }

    private void userControlA_OnShowReport(object sender, Report r)
    {
        // Show the report
        this.ShowReport(r);
    }
}

答案 1 :(得分:0)

上面的帖子很好,除了init()方法不应在ControlB中,而应在父窗体中,如下所示:

jquery