2013-05-02 2 views
3

GUI 클래스가 있습니다. 나는 frmMain (form)을 GUI 컨스트럭터로 전달한다. 그럼 난 자식 컨트롤에 액세스 할 수있는 다음과 같은 방법이 있습니다 컨트롤을 통해 동적으로 루핑해도 아무 효과가 없습니다.

public void assignEvents(frmMain frm) 
{ 
    foreach (Control ctl in frm.Controls) 
    { 
     ctl.BackColor = Color.GreenYellow; 
     Log.AddData(ctl.Name.ToString() + ".Backcolor = " + ctl.BackColor.ToString(), 3); 
    } 
} 

내가 출력 (로그)의 새로운 업데이트 색상을 얻을 수를하지만 컨트롤에 영향을지지 않습니다 그들은 기본 색 여전히. 내가 뭘 잘못하고 있는거야?

편집 : 나는 다음과 같이 호출

: 귀하의 코멘트에

// GUI.cs 
    public class GUI { 
     public GUI(frmMain frm){ 
      assignEvents(frm); 
     } 
    } 

    // frmMain.cs 
    public frmMain() 
    { 
     InitializeComponent(); 
     gui = new M.Gui (this); 
    } 
+2

당신이 양식을 다시 그릴 필요가 있습니다 - foreach는 – Sayse

+0

후에는 *하지 *'무효화를 (전화를해야한다')'frm.Invalidate을()' 컨트롤을 제대로 작성하면이 작업을 수행 한 후 필자는 폼을 생성하고 버튼, 레이블 및 TextBox를 삭제하고 위의 코드를 수행하는 버튼 핸들러를 추가하여이를 테스트했습니다. 단추를 클릭하면 배경색이 GreenYellow로 바뀝니다. –

+1

Invalidate()가 필요하지 않으므로 BackColor 속성 setter가 이미이를 수행합니다. 메소드의 마지막 부분에이 라인을 추가하여 변경 사항을 확인하십시오 :'frm.Show();'Winforms는 많은 프로그래머가 객체 지향 프로그래밍에 대해 처음 배우는 곳입니다. –

답변

0

을 바탕으로, 당신은 BackColor 속성을 설정하기 위해 각 ControlCollection에 재귀 적 이동을 시도 할 필요가있다.

것은 이런 식으로 코드를 변경 시도 :

public GUI(frmMain frm) { 
    assignEvents(frm.Controls); 
} 

public void assignEvents(Control.ControlCollection controls) { 
    foreach (Control ctl in controls) { 
    ctl.BackColor = Color.GreenYellow; 
    assignEvents(ctl.Controls); 
    } 
} 
관련 문제