Мне нужно переопределить метод Add свойства «Controls» myControl, который расширен из панели управления Windows. Для этого я расширил класс ControlCollection до MyControlCollection, где я переопределил его метод Add. Теперь я объявил свойство Controls типа MyControlCollection, чтобы скрыть свойство Controls панели. Когда я получаю доступ к this.Controls.Add(control), это относится к переопределенному методу добавления. Но если я перетащу элемент управления в myControl, поведение будет соответствовать методу добавления базового типа. Может ли кто-нибудь предложить причину и средство для решения этой проблемы? Заранее спасибо.
Переопределение свойства Controls панели в C#
Ответы (3)
Вместо этого вы можете переопределить функцию CreateControlCollection и вернуть экземпляр класса по вашему выбору, который наследует System.Web.UI.ControlCollection. Удалите свойство Controls из своего класса, вам не нужно переопределять или скрывать исходную реализацию.
Причина в том, что дизайнер вызывает Control.Controls, а не обращается к вашей отдельной коллекции. Честно говоря, ваше решение звучит так, как будто ему суждено вызвать проблемы — обычно это происходит при скрытии участников.
Чего именно вы пытаетесь достичь? Не похоже, что в ControlCollection
есть хорошее событие, к которому можно подключиться, но может быть другой способ решения проблемы.
РЕДАКТИРОВАТЬ: я только что видел, что Control
имеет ControlAdded
событие — будет ли вам достаточно подписки на него?
На самом деле я должен ограничить добавление элементов управления в свой элемент управления, если некоторые флаги верны. Я использовал это событие ControlAdded, но оно только добавило проблем. ControlAdded срабатывает только после добавления этого элемента управления в родительский элемент в позиции 0, 0. После возникновения этого события он перемещает элемент управления в соответствии с положением мыши во время удаления. Если я удалю этот новый элемент управления из родительского элемента в ControlAdded, произойдет исключение EventHandler.