更改foreach循环中的Control属性
本文关键字:Control 属性 foreach 循环 更改 | 更新日期: 2023-09-27 18:21:58
我试图强制启用TableLayoutPanel
中的控件(之前我单独禁用了这些控件)。
使用此代码不会更改任何内容(我记得foreach不能影响正在循环的项!)。我想应该有一些铸造或其他东西来让它发挥作用:
foreach(Control ctrl in myTable.Controls)
{
ctrl.Enabled = true;
}
myTable
本身在另一个表中。。。如果需要指出的话。我想再次启用的控件类型为TextBox
和DomainUpDown
。
这里有一个示例,显示您可以像预期的那样调整属性。但是您不能更改正在迭代的引用。试试这个,看看它是否能澄清什么。
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
。我解决了这个问题。感谢大家的投入。