更改foreach循环中的Control属性

本文关键字:Control 属性 foreach 循环 更改 | 更新日期: 2023-09-27 18:21:58

我试图强制启用TableLayoutPanel中的控件(之前我单独禁用了这些控件)。

使用此代码不会更改任何内容(我记得foreach不能影响正在循环的项!)。我想应该有一些铸造或其他东西来让它发挥作用:

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

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

更改foreach循环中的Control属性

这里有一个示例,显示您可以像预期的那样调整属性。但是您不能更改正在迭代的引用。试试这个,看看它是否能澄清什么。

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();
    }
}

TableLayout不是一个控件容器,尽管它看起来是这样。因此,您应该迭代其他容器来找到您的控件。

     //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;
        }

真的很抱歉打扰。。。显然,在挠头几个小时后,我发现问题是因为表本身在代码中的某个位置被设置为Enabled = false。我解决了这个问题。感谢大家的投入。