在foreach循环中更改Control属性

时间:2012-01-28 22:15:47

标签: c# winforms

我正在尝试强制启用TableLayoutPanel中的控件(我之前单独禁用控件)。

使用此代码不会改变任何东西(我记得foreach不能影响循环的项目!)。我想应该有一些演员或某些东西让它起作用:

foreach(Control ctrl in myTable.Controls)
{
    ctrl.Enabled = true;
}

myTable本身就在另一张表中...如果需要指出的话。我想要再次启用的控件属于TextBoxDomainUpDown类型。

4 个答案:

答案 0 :(得分:0)

这是一个示例,显示您可以调整属性,就像您要做的那样。但是你无法改变你正在迭代的引用。试试这个,看看它是否澄清了什么。

public class BasicClass
{
    public int BasicProperty { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        List<BasicClass> lst = new List<BasicClass>();
        lst.Add(new BasicClass {BasicProperty=5});
        lst.Add(new BasicClass { BasicProperty = 6 });
        foreach (var item in lst)
        {
            item.BasicProperty++;
        }

        Console.WriteLine("{0}, {1}", lst[0].BasicProperty, lst[1].BasicProperty);
        Console.ReadLine();
    }
}

答案 1 :(得分:0)

TableLayout不是一个控制容器,尽管看起来似乎如此。因此,您应该迭代其他容器来查找控件。

答案 2 :(得分:0)

     //MyparentControl is the parent control of myTable
     //so assuming 0 is the index of "myTable" 

     for (int h = 0; h < MyparentControl.Controls[0].Controls.Count; h++)
        {
            MyparentControl.Controls[0].Controls[h].Enabled = true;
        }

答案 3 :(得分:0)

真的很抱歉打扰...显然在我抓了几个小时之后我发现问题是因为表本身在代码的某处设置为Enabled = false。我照顾好了,问题解决了。感谢大家的投入。