Winforms控件占位符

Dou*_*oug 4 .net controls winforms

我试图将System.Windows.Forms.Control添加到给定的窗体控件集合.我这样做是通过创建类型控件的私有字段,然后将此字段实例化为构造函数中的System.Windows.Forms.Control的新实例.

在运行时,我试图通过执行类似以下代码示例的操作,将_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();
  }
}
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 5

这不起作用,因为原始占位符仍然是添加到控件的引用.你可以通过这样做来解决它:

public void ChangeToTextBox()
{
  this.Controls.Remove(_placeholder); // Remove old
  _placeholder = new TextBox();
  this.Controls.Add(_placeholder); // Add new
}
Run Code Online (Sandbox Code Playgroud)

话虽如此,如果要进入表单上的相同位置,您可能需要考虑将Panel放在那里,只需将TextBox添加到Panel.这样就不需要删除现有的控件了,因为它只是添加了一个控件.