2012-01-28 85 views
0

我試圖迫使一個TableLayoutPanel控制。在foreach循環改變控件屬性

使用此代碼不會改變任何東西(我記得的foreach不能大意正在架設到項目!)。我想應該有一些鑄造或東西,使其工作:

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

myTable本身是另一個表內......如果需要的話必須指出的。我想再次啓用的控件類型爲TextBoxDomainUpDown

+2

僅供參考,你可以* *的影響(例如,一個字符串屬性從「富」到「酒吧」改變)集合中的項目,只是沒有將其刪除或插入新項目。當你運行這段代碼時會發生什麼? – 2012-01-28 22:19:20

+1

發佈的代碼應該可以工作。控件是否在另一個容器內?是否啓用了myTable? myTable在禁用的父容器中? – LarsTech 2012-01-28 22:20:29

+0

是的,'myTable'本身就在一張桌子裏,如何修復它? – 2012-01-28 23:12:13

回答

0

打擾實在不好意思......抓我的頭幾個小時後,顯然我發現這個問題是因爲表本身的代碼設置爲Enabled = false地方。我照顧了,問題解決了。感謝您的投入。

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

TableLayout不是控制容器,儘管事實似乎如此。所以,你應該迭代一些其他的容器來找到你的控件。

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