2010-05-17 47 views
1

我似乎遇到了一些奇怪的問題,我相信會變成一件簡單的事情。我有一個Windows窗體,並在窗體上有1個名爲MainPanel的面板,在MainPanel內部,我有另一個面板,裏面有一個按鈕,並且在MainPanel中有一個標籤,但不在第二個面板中。 2個控件。我想要做的是將MainPanel中的所有控件複製到另一個面板對象。我現在用的是下面的C#代碼來做到這一點:通過Windows窗體上的控件進行迭代

GUIPanel gp = new GUIPanel(); 
foreach (System.Windows.Forms.Control ctrl in gp.Controls["MainPanel"].Controls) 
{ 
    m_OptionsControl.Controls.Add(ctrl); 
} 

當我運行此代碼,則複製與按鈕面板,但不是標籤。更奇怪的是,當我設置一個斷點並通過調試器運行時,我在即時窗口中輸入「?gp.Controls [」MainPanel「] .Controls.Count」,它返回2,就像它應該那樣。但是,在遍歷代碼時,它只執行一次foreach循環。我在這裏錯過了什麼?

回答

2

WinForms控件不能被複制;你的代碼將無法正常工作。
將控件添加到第二個面板時,它將從第一個面板中刪除。

您可以使用反轉for循環移動所有控件。
您可以通過創建每個控件的新實例並複製所有屬性來複制控件。

編輯:例如:

for (int i = MainPanel.Controls.Count - 1; i >= 0; i--) { 
    MainPanel.Controls[i].Parent = m_OptionsControl; 
} 
+0

搬家是我想要的。你有沒有一個反例for循環的例子? – Icemanind 2010-05-17 02:04:50

+0

@icemanind:你在這裏。 – SLaks 2010-05-17 02:44:02

+0

你是不是指我 - ? – jjxtra 2010-05-17 02:45:18