不通过控制数组更改字段的属性
本文关键字:字段 属性 数组 控制 | 更新日期: 2023-09-27 18:28:33
我有WinForm,那里有很多控件,在某些时刻我需要更改其中一些控件的属性。。因此,我创建控制数组并确定应该更改的
controls = new Control[] {loadFromFile_btn, logout_btn, postBtn, waitFrom_tb, waitTo_tb, messageTB, recurs_check};
ChangeStatus.activStatus(controls);
然后在我的类中ChangeStatus对数组中的所有这些元素进行更改
public static void activStatus(Control[] controlObj)
{
for (int i = 0; i < controlObj.Count() - 1; i++)
{
controlObj[i].BeginInvoke((Action)delegate
{
if (controlObj[i] is TextBox || controlObj[i] is CheckBox || controlObj[i] is Panel)
controlObj[i].Enabled = true;
else
{
controlObj[i].BackColor = Color.DarkGray;
controlObj[i].Enabled = true;
}
});
}
}
但我有个问题。。。该更改仅适用于数组中的最后一个元素。请帮帮我。。
这是因为闭包。尝试将i
存储在本地变量中,并在匿名方法中使用它
for (int i = 0; i < controlObj.Count() - 1; i++)
{
int j = i;
controlObj[i].BeginInvoke((Action)delegate
{
if (controlObj[j] is TextBox || controlObj[j] is CheckBox || controlObj[j] is Panel)
controlObj[j].Enabled = true;
else
{
controlObj[j].BackColor = Color.DarkGray;
controlObj[j].Enabled = true;
}
});
}