将一个Windows窗体设置为另一个Windows窗体的MDI子窗体(或等效的东西)

时间:2011-04-20 07:25:25

标签: c# winforms

我有两个Windows窗体应用程序,我们称之为FormA.exe(父级)和FormB.exe(子级)。 FormB.exe是一个可以单独运行的应用程序。 FormA.exe是另一个应用程序,其功能之一是调用FormB.exe

我有两个应用程序的源代码,我可以修改它们。

目前只要FormA.exe想要呼叫FormB.exe,我就会使用Process类来启动FormB.exe进程。问题是

  1. 我不知道如何在这两个Form之间传递消息。
  2. FormB.exeFormA发出呼叫时,用户将看作另一个应用程序,与FormA.exe无关,但我希望它显示为FormA下的单个应用程序,FormB作为MDI子项。
  3. FormB本身就是一个MDI。因此,如果我将其作为MDI加载,我将收到此错误System.ArgumentException: Form cannot be both an MDI child and MDI parent
  4. 如果我没有加载为MDI,那么我的FormB无法正常运行。换句话说,FormA的整个目的都将丢失。
  5. 还有其他方法 - 除了将FormB设置为MDI子项FormA - 使一个winform应用完全包含在另一个中,并让它们相互通信吗?

2 个答案:

答案 0 :(得分:1)

我同意诺埃尔

有很多方法可以实现您的目标。一种方法是使用System.Reflection

像formA

这样
 Assembly a = Assembly.LoadFrom("WindowsApplication1.exe");
        Form frm = a.CreateInstance("WindowsApplication1.FormB") as Form;
        frm.MdiParent = this;
        frm.Show();

答案 1 :(得分:0)

您可以将FormA.exe中的项目引用添加到FormB.exe,并以编程方式将formb加载为mdi子格式。

您可以轻松地在它们之间传递消息。 FormB.exe仍然可以作为应用程序自行调用,只需将其保存为Windows应用程序而不是Windows库项目。