在用户控件之间传递数据C#

dbz*_*dbz 3 c# user-controls report winforms

众所周知,有些解决方案与此类似,但是我无法用它们解决问题。我有两个用户控件:

  • 第一个创建一个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;
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

Rom*_*mbé 6

您应该为此使用事件。在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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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);
    }
}
Run Code Online (Sandbox Code Playgroud)