我正在尝试将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();
}
}
答案 0 :(得分:5)
这不会起作用,因为原始占位符仍然是添加到控件的引用。您可以通过执行以下操作来解决此问题:
public void ChangeToTextBox()
{
this.Controls.Remove(_placeholder); // Remove old
_placeholder = new TextBox();
this.Controls.Add(_placeholder); // Add new
}
话虽如此,如果要进入表单上的相同位置,您可能需要考虑在其中放置Panel,并将TextBox添加到Panel中。这样就不需要删除现有的控件了,因为它只是添加一个。
答案 1 :(得分:1)
它不起作用,因为添加到Controls集合的内容是您在构造函数中添加的System.Windows.Forms.Control
实例。然后,您将_placeholder
指向的对象更改为文本框控件,但您永远不会将该文本框添加到表单的Controls
集合中。