2014-12-03 66 views
-3

在C#的WinForms,我有一個問題,其中的代碼塊將創建兩個變量指向相同的形式,而不是形式的兩個不同的實例:如何避免c#(winforms)創建指向表單的指針?

Form formA = new LoginForm(); 
Form formB = formA; 
formB.Close(); 

當formB關閉時,兩種形式都關閉。我試圖避免這種情況,但是我找不到任何解決方案,如formB = new Form(formA);

在我真正的解決方案中,有額外的控件添加到第一個窗體(formA)和一些額外的數據存儲在窗體的字段中。這就是爲什麼我需要複製第一個表格

任何幫助非常感謝!

+1

您可能從閱讀本MSDN文章中受益:http://msdn.microsoft.com/en-us/library/t63sy5hs.aspx – Brandon 2014-12-03 17:51:15

回答

1

如果你想有兩種形式,創建兩種形式 - 兩個獨立的對象 - 通過調用構造兩次:

Form formA = new LoginForm(); 
Form formB = new LoginForm(); 

現在,他們是獨立的對象。請注意,沒有什麼特定於此的WinForms - 所有類都是相同的。

編輯:如果你想創建一個克隆原始形式,你仍然需要創建一個新的對象 - 表單中的每個控件也需要克隆(控件不能有兩個父母)。克隆是一件棘手的事情,如果可能的話,我會盡量避免它。相反,我會嘗試有效地重播添加了控件的相同原始動作或以原始形式設置數據。

你沒有多說什麼信息是在你的表單中,但如果它是複雜的數據,你可能想要從表單中分離出來,將它封裝在自己的類中......然後你可以決定是否需要當您創建第二個表單時,該對象的深層或淺層克隆。

+0

我已編輯該問題以解釋爲什麼這不適合 – Stromata 2014-12-03 17:50:36

+0

@Stromata:請參閱我的編輯到答案。正確的方法將取決於準確定製的內容。我個人會遠離克隆。 – 2014-12-03 17:54:48

0

有沒有一個單一的聲明來做你所問的。

您可以創建第二個表格,然後將控制從第一複製到第二個形式,也許使用Controls.CopyTo(我不知道CopyTo從)。

要處理數據,可以創建一個包含需要使用的所有數據的類,並將該類的克隆複製到新表單中。然後,您可以手動填充新表單上的一些字段。