2010-05-17 7 views
1

나는 간단한 일이 될 것이라는 확신이 들게되는 이상한 문제가있는 것 같습니다. 저는 Windows Form을 가지고 있고 폼에 MainPanel이라는 하나의 패널이 있고 MainPanel 안에는 버튼이있는 다른 패널과 MainPanel 안에있는 레이블이 있지만 두 번째 패널에는 없습니다. 2 개의 컨트롤. 내가 뭘 하려는지 MainPanel 내부의 모든 컨트롤을 다른 패널 객체로 복사하는 것입니다. 나는이 작업을 수행하기 위해 다음과 같은 C# 코드를 사용하고 있습니다 :Windows Form에서 컨트롤 반복하기

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

이동 내가 원하는 것입니다. reverse for loop의 의미를 보여주는 예가 있습니까? – Icemanind

+0

@cemanind : 여기 있습니다. – SLaks

+0

내가 ... - 그러지 마세요? – jjxtra

관련 문제