【问题标题】:Winforms Control PlaceholderWinforms 控件占位符
【发布时间】:2011-01-29 02:12:58
【问题描述】:

我正在尝试将 System.Windows.Forms.Control 添加到给定的表单控件集合中。为此,我创建了一个类型为 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();
  }
}

【问题讨论】:

    标签: .net winforms controls


    【解决方案1】:

    正如所写的那样,这不起作用,因为原始占位符仍然是添加到控件的引用。您可以通过以下方式修复它:

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

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

    【讨论】:

    • 是的,有道理,是的,我正试图将它放在同一个位置。感谢您的宝贵意见!
    【解决方案2】:

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

    【讨论】:

    • 感谢您的宝贵意见!
    猜你喜欢
    • 2018-10-16
    • 2011-04-30
    • 1970-01-01
    • 2014-09-25
    • 2011-11-19
    • 2013-07-15
    • 2011-01-05
    • 2018-07-19
    • 2012-01-04
    相关资源
    最近更新 更多