使UserControl自行删除

时间:2009-03-30 23:05:11

标签: c# user-controls

有没有人看到这个有什么问题:

this.Controls.Remove(this);

this是一个扩展用户控制的类。当我逐步完成这部分代码时,看起来一切都很好,但是表单没有任何反应。我希望控制能够消失。

4 个答案:

答案 0 :(得分:10)

如上所述,你正在从自身中移除控制......这可能不是你想要的。我假设你想从它的中删除控件 - 所以你可能想要this.Parent.Controls.Remove(this);

幸运的是,由于您没有提及平台,因此WebFormsWinForms的代码相同。

答案 1 :(得分:4)

没有任何事情发生,因为它在'this'

的控件集合中找不到'this'

如果您的范围在Control本身内,您可能希望

this.Container.Controls.Remove(this);

但这一切都取决于什么类型的控制和什么类型的容器。但上述情况应该适用于大多数情况。

修改

如果您知道您的控件属于某个表单,您可以执行以下操作,或将Form替换为已知的容器类型(即面板)

((Form)this.Container).Controls.Remove(this);

答案 2 :(得分:4)

其他回答是正确的,指出您没有使用正确的集合。

但是,我会指出一个从页面中删除自己的控件并不是我认为来自任何asp.net控件的“预期行为”。覆盖Render方法(或将Visible属性设置为false)会产生相同的结果,并且很少有机会混淆将来维护该代码的人。

答案 3 :(得分:1)

this.Controls是您的usercontrol中存在的Controls集合。 “这个”不会存在于该集合中,因为“this”是父级。

我想你想找到表单对象,然后执行myForm.Controls.Remove(this)。