2013-05-02 85 views
3

我有一個GUI類。我將一個frmMain(表單)傳遞給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

你可能需要重新繪製表格 - 'frm.Invalidate()'在foreach – Sayse 2013-05-02 11:32:32

+0

後,您應該*不*需要調用'的Invalidate()'這樣做後,如果控件編寫正確。我通過創建一個表單,放下一個按鈕,一個標籤和TextBox並添加一個執行上述代碼的按鈕處理程序來測試它。當你點擊按鈕時它工作正常 - 背景顏色變爲GreenYellow。 – 2013-05-02 11:50:51

+1

無需Invalidate(),BackColor屬性設置器已經做到了。在該方法的末尾添加以下行以查看更改:'frm.Show();'Winforms是許多程序員首先了解面向對象的編程的地方。 – 2013-05-02 11:55:27

回答

0

,你需要嘗試通過每個遞歸的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); 
    } 
}