Winforms控件占位符

4

我试图将一个System.Windows.Forms.Control添加到给定的表单控件集合中。我通过创建一个私有字段来完成这个操作,该字段的类型为control,并在构造函数中将此字段实例化为System.Windows.Forms.Control的新实例。

在运行时,我尝试将_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();
  }
}
2个回答

5

这段代码存在问题,因为原始的占位符仍然是添加到控件中的引用。你可以通过以下方式进行修复:

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

话虽如此,如果这个控件要放在表单的同一位置,您可能需要考虑在那里放置一个面板,并将文本框添加到面板中。这将避免删除现有控件的需要,因为它只是添加一个控件。


好的,明白了。是的,我正在尝试将它放在同一个位置。非常感谢您宝贵的建议! - Doug

1

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


感谢您宝贵的意见! - Doug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接