我现在有一些关于这个问题的解决方案但是,我无法用它们来解决我的问题。 我有两个用户控件:
第一个创建一个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
?
答案 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