我正在寻找一个很好的模式来解决Windows窗体应用程序中的以下循环引用:
在整个应用程序中,菜单上通常都有相同的项。因此,组装1和组装2都相互引用“新建”另一个表单,并对它们进行.Show。
关于尺寸的注意事项:我的应用程序是一个现有的应用程序,所以情况并不像上述两个程序组装的情况那么简单。但是,如果我可以简单地解决上面的问题(可能不是实现a,我可以将它应用到一个更大的应用程序中(大约有20个组件,所有组件都有几个跨组件相互弹出的表单)。
我想了几个解决办法,但看起来都很麻烦。我错过了一个简单的解决方案吗?
发布于 2008-12-12 14:54:41
使用组件工厂或组件编写器(如MEF )创建实例,而不引用组件的源程序集。
发布于 2008-12-12 14:43:34
您可以(在这两种情况下)使按钮简单地引发一个事件。shell exe引用两个程序集,并将偶数连接起来以显示另一个窗体。
所以exe知道这两种情况;两种表单都不知道另一种。
例如(相同的概念):
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();
}
}发布于 2008-12-12 14:47:16
您是否考虑过创建第三个程序集并将所有公共代码移动到第三个程序集中?
https://stackoverflow.com/questions/362918
复制相似问题