在Windows窗体表单上动态删除/添加控件

时间:2010-09-02 14:49:43

标签: c# winforms

我想在Windows窗体表单上删除并在运行时添加控件。问题是,控件必须具有与另一个完全相同的大小,位置和锚点。

如果用户打开窗口并满足某个条件,我想删除旧控件并将其替换为另一个。

所以,我试过这个:

RichTextBox InsideText = new RichTextBox();
InsideText.Location = InsideBox.Location;
InsideText.Size = InsideBox.Size;

Controls.Remove(InsideBox);
Controls.Add(InsideText);

但是,正如预期的那样,它没有用。 InsideBox未被删除,InsideText未添加。

我做错了什么?有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

我建议更简单的方法是:

  1. 使用正确的锚点等设置正确位置的面板。
  2. 将该面板集中的control1添加到完整Dock
  3. 只需删除control1并在该面板中添加control2,然后将其设置为Dock。
  4. 然后所有大小的东西等由一个Panel完成,而不是必须复制它。

答案 1 :(得分:0)

注意:我之所以提出替代方法而不是直接解决原始问题,是因为我认为OP发布的代码没有任何问题。

另一种方法是在完全相同的位置在窗体设计器中创建两个控件,并仅在满足条件时切换其可见性。

正如评论中所指出的,这种方法确实有一个缺点,即在设计师中处理表单会变得更加困难。

如果这是一个问题,您仍然可以将Designer用于另一端:仅使用上述方法查看创建“新”控件所需的代码;然后从InitializeComponent中删除该代码并将其移动到“旧”控件应替换为新控件的位置。这样,您可以确保创建新控件的代码是正确的。