.net Winforms控件占位符

.net Winforms控件占位符,.net,winforms,controls,.net,Winforms,Controls,我正在尝试将System.Windows.Forms.Control添加到给定的窗体控件集合。为此,我创建了一个control类型的私有字段,然后在构造函数中将该字段实例化为System.Windows.Forms.control的新实例 在运行时,我尝试将_占位符变量的类型更改为文本框,方法如下代码示例所示。因此,基本上,我尝试使用一个类型为Control的占位符,并在运行时将其更改为另一个控件,如文本框或标签。我的问题是我的表格上没有显示任何内容?如有任何见解,将不胜感激 public cl

我正在尝试将System.Windows.Forms.Control添加到给定的窗体控件集合。为此,我创建了一个control类型的私有字段,然后在构造函数中将该字段实例化为System.Windows.Forms.control的新实例

在运行时,我尝试将_占位符变量的类型更改为文本框,方法如下代码示例所示。因此,基本上,我尝试使用一个类型为Control的占位符,并在运行时将其更改为另一个控件,如文本框或标签。我的问题是我的表格上没有显示任何内容?如有任何见解,将不胜感激

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

这将不起作用,因为原始占位符仍然是添加到控件的引用。您可以通过执行以下操作来修复它:

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

这是说,如果这将进入你的表单中的同一个位置,你可能想考虑把它放在那里,而只是将文本框添加到面板中。这将防止删除现有控件的需要,因为它只是在中添加一个控件。

它不起作用,因为添加到控件集合的是您在构造函数中添加的
System.Windows.Forms.Control
的实例。然后,您可以更改占位符指向文本框控件的对象,但您永远不会将该文本框添加到表单的
控件
集合中。

是的,这很有意义,是的,我正在尝试将它添加到同一位置。感谢您的宝贵意见!感谢您的宝贵意见!