C# 不通过控制数组更改字段的属性

C# 不通过控制数组更改字段的属性,c#,arrays,winforms,controls,C#,Arrays,Winforms,Controls,我有WinForm,那里有很多控件,在某些时候我需要更改其中一些控件的属性。。因此,我创建了控制数组,并确定应该更改什么 controls = new Control[] {loadFromFile_btn, logout_btn, postBtn, waitFrom_tb, waitTo_tb, messageTB, recurs_check}; ChangeStatus.activStatus(controls); 然后在我的类中,对数组中的所有元素进行更改 public static v

我有WinForm,那里有很多控件,在某些时候我需要更改其中一些控件的属性。。因此,我创建了控制数组,并确定应该更改什么

controls = new Control[] {loadFromFile_btn, logout_btn, postBtn, waitFrom_tb, waitTo_tb, messageTB, recurs_check};
ChangeStatus.activStatus(controls);
然后在我的类中,对数组中的所有元素进行更改

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;
                }
            });
        }
    }
公共静态无效活动状态(控制[]控制对象)
{
对于(int i=0;i
但是我有个问题。。。更改仅适用于数组中的最后一个元素。请帮帮我。

这是因为。请尝试将
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;
            }
        });
    }
for(int i=0;i
这是因为。请尝试将
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;
            }
        });
    }
for(int i=0;i
这是因为。请尝试将
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;
            }
        });
    }
for(int i=0;i
这是因为。请尝试将
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;
            }
        });
    }
for(int i=0;i