首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环参考

循环参考
EN

Stack Overflow用户
提问于 2008-12-12 14:32:48
回答 5查看 1.6K关注 0票数 3

我正在寻找一个很好的模式来解决Windows窗体应用程序中的以下循环引用:

  • 程序集1包含一个Windows窗体,其中包含“.Show”菜单项,该菜单项用于组装2中的窗体。
  • 程序集2包含一个Windows窗体,其中包含“.Show”菜单项,该菜单项用于组装1中的窗体

在整个应用程序中,菜单上通常都有相同的项。因此,组装1和组装2都相互引用“新建”另一个表单,并对它们进行.Show。

关于尺寸的注意事项:我的应用程序是一个现有的应用程序,所以情况并不像上述两个程序组装的情况那么简单。但是,如果我可以简单地解决上面的问题(可能不是实现a,我可以将它应用到一个更大的应用程序中(大约有20个组件,所有组件都有几个跨组件相互弹出的表单)。

我想了几个解决办法,但看起来都很麻烦。我错过了一个简单的解决方案吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-12-12 14:54:41

使用组件工厂或组件编写器(如MEF )创建实例,而不引用组件的源程序集。

票数 1
EN

Stack Overflow用户

发布于 2008-12-12 14:43:34

您可以(在这两种情况下)使按钮简单地引发一个事件。shell exe引用两个程序集,并将偶数连接起来以显示另一个窗体。

所以exe知道这两种情况;两种表单都不知道另一种。

例如(相同的概念):

代码语言:javascript
复制
using System;
using System.Windows.Forms;
class Form1 : Form
{
    public event EventHandler Foo;
    public Form1()
    {
        Button btn = new Button();
        btn.Click += delegate { if(Foo!=null) Foo(this, EventArgs.Empty);};
        Controls.Add(btn);
    }
}
class Form2 : Form
{
    public event EventHandler Bar;
    public Form2()
    {
        Button btn = new Button();
        btn.Click += delegate { if (Bar!= null) Bar(this, EventArgs.Empty); };
        Controls.Add(btn);
    }
}
static class Program
{
    [STAThread]
    static void Main()
    {
        ShowForm1();
        Application.Run();
    }
    static void ShowForm1()
    {
        Form1 f1 = new Form1();
        f1.Foo += delegate { ShowForm2(); };
        f1.Show();
    }
    static void ShowForm2()
    {
        Form2 f2 = new Form2();
        f2.Bar += delegate { ShowForm1(); };
        f2.Show();
    }
}
票数 4
EN

Stack Overflow用户

发布于 2008-12-12 14:47:16

您是否考虑过创建第三个程序集并将所有公共代码移动到第三个程序集中?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/362918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档