2013-05-02 2 views
3

У меня есть класс GUI. Я передаю frmMain (form) в GUI contructor. Тогда у меня есть следующий метод доступа дочерних элементов управления:Динамически циклические элементы управления не имеют эффекта

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); 
    } 
} 

я получаю новый обновленный цвет в выходной (журнал), но это не имеет никакого влияния на элементы управления, и они все еще находятся в цвете по умолчанию. Любые идеи, что я делаю неправильно?

EDIT:

Я называю это так:

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

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

вам, возможно, придется перерисовывать форму - 'frm.Invalidate()' после Еогеаспа – Sayse

+0

Вы должны * не * должны называть 'Invalidate()' после этого, если элементы управления написаны правильно. Я протестировал это, создав форму, нажав на нее кнопку, ярлык и TextBox и добавив обработчик кнопки, который делает код выше. Он отлично работает, когда U нажимает кнопку - цвета фона меняются на GreenYellow. –

+1

Нет необходимости в Invalidate(), средство set свойства BackColor уже делает это. Добавьте эту строку в конце метода, чтобы увидеть изменения: 'frm.Show();' Winforms - это то, где многие программисты впервые узнают об объектно-ориентированном программировании. –

ответ

0

Основываясь на ваш комментарий, вы должны попытаться пойти рекурсивно через каждый ControlCollection установить свойство BackColor.

Попробуйте изменить свой код, чтобы что-то вроде этого:

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); 
    } 
} 
Смежные вопросы