【发布时间】:2013-04-26 13:27:02
【问题描述】:
我有一个 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);
}
【问题讨论】:
-
您可能需要在 foreach 之后重绘表单 -
frm.Invalidate() -
如果控件编写正确,您应该不必在执行此操作后调用
Invalidate()。我通过创建一个表单、在其上放置一个按钮、一个标签和 TextBox 并添加一个执行上述代码的按钮处理程序来测试这一点。当你点击按钮时它工作正常 - 背景颜色变为 GreenYellow。 -
不需要 Invalidate(),BackColor 属性设置器已经这样做了。在方法末尾添加这一行以查看更改:
frm.Show();Winforms 是许多程序员第一次学习面向对象编程的地方。 -
@JohnWillemse:你怎么称呼
assignEvents()?调用时表单是否已经可见? -
问题出在其他地方,因为您发布的代码有效。