2011-04-20 80 views
3

我有兩個窗體窗體應用程序,我們稱之爲FormA.exe(父級)和FormB.exe(子級)。 FormB.exe是可以單獨運行的應用程序。 FormA.exe是另一個應用程序,其功能之一是呼叫FormB.exe將一個Windows窗體設置爲另一個Windows窗體的MDI子窗體(或等價物)

我有兩個應用程序的源代碼,我可以修改它們。

當前每當FormA.exe想呼叫FormB.exe時,我會使用Process類來啓動FormB.exe進程。問題是,

  1. 我不知道如何通過這兩個Form s之間的消息。
  2. FormB.exe會從FormA叫喚,它會出現用戶爲另一應用,獨立的FormA.exe,但我想它顯示爲一個單一的應用程序FormA下,與FormB作爲MDI子。
  3. FormB本身是一個計量吸入器。所以如果我把它作爲MDI載入,我會得到這個錯誤System.ArgumentException: Form cannot be both an MDI child and MDI parent
  4. 如果我不加載爲MDI,則我的FormB無法正常工作。換句話說,FormA的全部用途都已丟失。

有沒有其他的辦法---除了設置FormB作爲MDI孩子FormA - 使一個winform應用程序完全包含在另外一個,讓他們互相通信?

+0

更好的方式做,這是擺在同一過程中這兩種形式,你可以做,因爲你的代碼 – 2011-04-20 08:58:23

+0

@大衛,這是一項巨大的工作量。 – 2011-04-20 09:24:37

+0

也許很多工作,但至少有成功的前景 – 2011-04-20 10:29:44

回答

0

您可以將FormA.exe中的項目引用添加到FormB.exe,並以編程方式將formb作爲mdi子項加載以形成。

然後您可以輕鬆地在它們之間傳遞消息。 FormB.exe仍然可以作爲應用程序自行調用,只是將其保存爲Windows應用程序而不是Windows庫項目。

+0

@Noel,你能更明確嗎?你是說我可以使用['System.Reflection.Assembly.LoadFrom'](http://social.msdn.microsoft.com/Forums/en-IE/winforms/thread/ae8062a5-cd8e-4450-a4ce-d8430e93c79e )?我如何在兩個應用程序之間傳遞消息? – 2011-04-20 07:34:03

+0

如果您有源代碼,則不需要使用反射。您可以爲FormA項目打開VS解決方案,並將項目引用添加到FormB。然後,您可以在FormA中編寫代碼,將FormB與您的解決方案中的任何其他項目一樣對待。 – 2011-04-20 08:01:11

+0

要傳遞一個消息,你只需調用FormB中的類的方法,沒有任何魔法發生,它只是被視爲另一個DLL。 – 2011-04-20 08:01:49

1

我同意諾爾

有很多方法可以實現你正在嘗試。這樣做的一種方法是使用System.Reflection

這樣在備考

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

@Subhash,但你如何在'FormA'和'FormB'之間傳遞消息? – 2011-04-20 07:44:56

+0

@Conditional再次改變有多種方式,但我方便的方式是實現接口 像 'IMdiParent FORMA = this.parent爲IMdiParent' 和 'ICHILD formB = FRM作爲IChild' – 2011-04-20 07:59:59

+0

@Subhash,嗯,你的代碼不工作,因爲'FormB'本身是一個MDI表單,請參閱更新的問題。 – 2011-04-20 08:10:03

相關問題