动态地在Windows Forms窗体上添加/移除控件

3

我希望在Windows Forms表单上运行时删除和添加控件。问题是,该控件必须具有与另一个控件完全相同的大小、位置和锚定。

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

因此,我尝试了以下方法:

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

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

但是,正如预料的那样,它并没有起作用。 InsideBox 没有被移除,InsideText 也没有被添加。

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


1
你检查了InsideText的Visible属性是否为true了吗? - Jonathan
1
这基本上是我做这件事的方式,对我很有效。当您从父控件的集合中删除控件时,它将消失。您确定您正在从正确的集合中删除它吗? - Jon B
我从未遇到过动态创建/移除控件的这个问题。您确定Visible为true吗?您尝试设置X和Y,宽度和高度,而不是使用Size和Location(我总是使用X、Y、Width、Height,这是我的老习惯),这是我做此操作时与此示例之间唯一的区别。如果我们能看到其他相关代码可能会有所帮助。 - FrustratedWithFormsDesigner
1个回答

4
我建议更简单的方法是:
  1. 在正确的位置添加一个面板,并设置正确的锚定等。
  2. 将control1添加到该面板中并设置为full Dock。
  3. 只需删除control1,然后将control2添加到该面板中并设置为Dock即可。
然后,所有大小调整等工作都由一个面板完成,而不必复制它。

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