Заставьте UserControl удалить себя - PullRequest
1 голос
/ 31 марта 2009

Кто-нибудь видит что-то не так с этим:

this.Controls.Remove(this);

this - это класс, расширяющий пользовательский контроль. Когда я прохожу этот раздел кода, все выглядит нормально, но с формой ничего не происходит. Я ожидаю, что контроль исчезнет.

Ответы [ 4 ]

10 голосов
/ 31 марта 2009

Как уже упоминалось, вы удаляете элемент управления из себя ... это вряд ли то, что вы хотите. Я предполагаю, что вы хотите удалить элемент управления из его parent - так что вы, вероятно, хотите this.Parent.Controls.Remove(this);.

К счастью, поскольку вы не упомянули платформу, код такой же для WebForms или WinForms .

4 голосов
/ 31 марта 2009

Ничего не происходит, потому что он не находит 'this' в коллекции элементов управления 'this'

Если ваша область действия находится внутри самого элемента управления, вы можете сделать

this.Container.Controls.Remove(this);

но все зависит от того, какой тип контроля и в каком типе контейнера. но вышеупомянутое должно работать в большинстве случаев.

EDIT:

Если вы знаете, что ваш элемент управления принадлежит форме, вы можете сделать следующее или заменить форму на известный тип контейнера (то есть панель)

((Form)this.Container).Controls.Remove(this);
4 голосов
/ 31 марта 2009

Другие ответы справедливо указывают на то, что вы не используете правильный сбор.

Однако я укажу, что элемент управления, который удаляет себя со страницы, - это не то, что я бы назвал «ожидаемым поведением» любого элемента управления asp.net. Переопределение метода Render (или установка свойства Visible на false) приведет к тому же результату и даст гораздо меньше возможностей сбить с толку тех, кто будет поддерживать этот код в будущем.

1 голос
/ 31 марта 2009

this.Controls - это коллекция элементов управления, существующих в вашем пользовательском контроле. «this» не будет существовать внутри этой коллекции, так как «this» является родителем.

Я думаю, что вы хотите найти объект формы и выполнить myForm.Controls.Remove (this).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...