动态循环控件不起作用
问题描述:
我有一个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);
}
答
,你需要尝试通过每个递归的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);
}
}
你可能需要重新绘制表格 - 'frm.Invalidate()'在foreach – Sayse 2013-05-02 11:32:32
后,您应该*不*需要调用'的Invalidate()'这样做后,如果控件编写正确。我通过创建一个表单,放下一个按钮,一个标签和TextBox并添加一个执行上述代码的按钮处理程序来测试它。当你点击按钮时它工作正常 - 背景颜色变为GreenYellow。 – 2013-05-02 11:50:51
无需Invalidate(),BackColor属性设置器已经做到了。在该方法的末尾添加以下行以查看更改:'frm.Show();'Winforms是许多程序员首先了解面向对象的编程的地方。 – 2013-05-02 11:55:27