2011-01-29 36 views
4

我想將System.Windows.Forms.Control添加到給定的表單控件集合。我通過創建一個類型控制的私有字段然後在構造函數中將此字段實例化爲一個新的System.Windows.Forms.Control實例來實現此目的。Winforms控件佔位符

在運行時,我試圖通過在下面的代碼示例中執行類似的操作,將_placeholder變量的類型更改爲TextBox。所以基本上我想要一個類型爲Control的佔位符,並在運行時將其更改爲另一個控件,如TextBox或Label。我的問題是沒有任何東西顯示在我的表格上?任何洞察力將不勝感激。

public class MyForm : Form 
{ 
    System.Windows.Forms.Control _placeholder = null; 

    public MyForm() 
    { 
    _placeholder = new System.Windows.Forms.Control(); 
    this.Controls.Add(_placeholder); 

    ChangeToTextBox(); 
    } 

    public void ChangeToTextBox() 
    { 
    _placeholder = new TextBox(); 
    } 
} 

回答

5

由於原始佔位符仍然是添加到控件中的引用,因此這不起作用。你可以做修復:

public void ChangeToTextBox() 
{ 
    this.Controls.Remove(_placeholder); // Remove old 
    _placeholder = new TextBox(); 
    this.Controls.Add(_placeholder); // Add new 
} 

話雖這麼說,如果這是要進入你的窗體上的同一個位置,你可能要考慮把一個Panel那裏,而不是,只是添加文本框到面板。這將防止需要刪除現有的控件,因爲它只是增加了一個。

+0

是的,有道理,是的,我試圖讓它在同一個位置。感謝您的寶貴意見! – Doug 2011-01-29 02:28:38

1

它不起作用,因爲添加到控件集合的內容是您在構造函數中添加的System.Windows.Forms.Control的實例。然後,您將_placeholder指向的對象更改爲文本框控件,但不會將該文本框添加到表單的Controls集合中。

+0

感謝您的寶貴意見! – Doug 2011-01-29 02:29:28