2011-01-29 15 views
4

特定のフォームコントロールコレクションにSystem.Windows.Forms.Controlを追加しようとしています。これは、型コントロールのプライベートフィールドを作成し、このフィールドをコンストラクターのSystem.Windows.Forms.Controlの新しいインスタンスにインスタンス化することで行います。Winformsコントロールのプレースホルダ

実行時に、次のコード例のように、_placeholder変数の型をTextBoxに変更しようとしています。だから基本的に私はコントロールの型のプレースホルダを持って、実行時に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

元のプレースホルダは引き続きコントロールに追加されているため、これは書かれているようには機能しません。これは、フォーム上の同じ場所に行くために起こっている場合は、あなたの代わりにそこPanelを置くことを検討する必要があります、

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

を言われていること、およびだけにテキストボックスを追加する:あなたがやってそれを修正することができパネル。これにより、既存のコントロールを削除する必要がなくなります。

+0

うん、それは意味があり、はい、私は同じ場所にそれを取得しようとしています。貴重なご意見ありがとうございました! – Doug

1

Controlsコレクションに追加されたのは、コンストラクターに追加したSystem.Windows.Forms.Controlのインスタンスなので、機能しません。 _placeholderが指すオブジェクトをテキストボックスコントロールに変更しますが、そのテキストボックスをフォームのControlsコレクションに追加することは決してありません。

+0

貴重なご意見ありがとうございます! – Doug

関連する問題