2016-07-26 28 views
0

這真讓我心煩,我不能做到這一點如何初始化內聯的ControlCollection控制的控制

Panel panel = new Panel() 
    { 
     Controls = new ControlCollection(this) 
     { 
      new Panel() 
      { 
       Controls = new ControlCollection(this) 
       { 
        new Label() { Text = "Label1" }, 
        new Label() { Text = "Label2" } 
       } 
      } 
     } 
    }; 

因爲,在這種特殊情況下,我得到Property or indexer 'Control.Controls' cannot be assigned to -- it is read only的財產。

,而是我必須這樣做

Panel innerPanel = new Panel(); 
    innerPanel.Controls.Add(new Label() { Text = "Label1" }); 
    innerPanel.Controls.Add(new Label() { Text = "Label2" }); 
    Panel panel = new Panel(); 
    panel.Controls.Add(innerPanel); 

任何聰明的方式來獲取樹一樣的代碼風格與我們合作?

回答

2

簡單地忽略ControlCollection構造函數調用:

Panel panel = new Panel 
{ 
    Controls = 
    { 
     new Panel 
     { 
      Controls = 
      { 
       new Label { Text = "Label1" }, 
       new Label { Text = "Label2" } 
      } 
     } 
    } 
}; 

這將PanelLabel子控件添加的,而不是創建新的對象ControlCollectionControls屬性返回的現有ControlCollection對象。

+0

太棒了,它的工作原理就是這樣。錯誤是有點誤導 – Chris