繁体   English   中英

在foreach循环中更改Control属性

[英]Changing Control property in foreach loop

我试图强制启用TableLayoutPanel中的控件(我之前分别禁用了控件)。

使用此代码不会更改任何内容(我记得foreach不会影响正在循环的项目!)。 我猜应该有一些强制转换或使其起作用的方法:

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

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

这是一个示例,显示您可以按期望的方式调整属性。 但是您不能更改要对其自身进行迭代的引用。 试试看,看看是否可以澄清。

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

非常抱歉打扰一下……显然在after了几个小时后,我发现问题出在表中,原因是表本身在代码中的某处设置为Enabled = false 我已经解决了,问题就解决了。 感谢大家的投入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM