2个项目,1个解决方案。项目A从项目B调用表单,反之亦然。C#VS2010

2个项目,1个解决方案。项目A从项目B调用表单,反之亦然。C#VS2010,c#,winforms,visual-studio-2010,C#,Winforms,Visual Studio 2010,我有一个项目a,它从项目B调用表单。项目a中的表单被禁用,项目B表单打开。关闭时,我需要项目B重新启用项目A表单,但它不允许我,因为循环引用导致我无法引用它。如何从项目A中引用项目B中的内容 听起来项目B不需要引用项目a。有很多方法可以实现这一点: a、 )项目a的表单通过在其上调用ShowDialog()而不是Show()来打开项目B表单。这会自动禁用A的窗体,直到B的窗体关闭 b、 )项目A的表单手动禁用自身,并开始侦听项目b表单上的FormClosed事件。当事件激发时,项目A的窗体将再次

我有一个项目a,它从项目B调用表单。项目a中的表单被禁用,项目B表单打开。关闭时,我需要项目B重新启用项目A表单,但它不允许我,因为循环引用导致我无法引用它。如何从项目A中引用项目B中的内容

听起来项目B不需要引用项目a。有很多方法可以实现这一点:

a、 )项目a的表单通过在其上调用
ShowDialog()
而不是
Show()
来打开项目B表单。这会自动禁用A的窗体,直到B的窗体关闭

b、 )项目A的表单手动禁用自身,并开始侦听项目b表单上的
FormClosed
事件。当事件激发时,项目A的窗体将再次启用自身

c、 )在一种特殊情况下,有时您需要a的表单来禁用和显示B的表单,有时您需要B的表单来禁用和显示a的表单,您可以通过让Project a创建两个表单并将其中一个作为对另一个表单的引用来实现。将构造函数添加到采用其他表单作为引用的表单:

private Form _formA;

public FormB(Form formA) {
    InitializeComponent();

    _formA = formA;
}

private void buttonFormA_Click(object sender, EventArgs e) {
    _formA.ShowDialog();
}

为什么不考虑一个项目C,其中您同时引用了项目a和项目B?这些表单相互依赖的事实应该告诉您它们属于同一个项目。@ManojKumarRai我可以这样做,但我想要一个更优雅的解决方案。我最终为这两个大项目创建了几个名称空间,但如果我坚持两个项目的解决方案,你的建议会起到作用。