Включение поверхности дизайна в пользовательском пользовательском элементе управления Winforms - PullRequest
2 голосов
/ 13 января 2010

Я попытался создать пользовательский элемент управления в C #, который обрабатывает другие элементы управления, добавленные в него. Пользовательский элемент управления состоит из двух панелей. Я пытаюсь добиться того, чтобы в случае перетаскивания другого элемента управления на мой пользовательский элемент управления в режиме разработки (или добавления программным способом во время выполнения) я хотел, чтобы этот элемент управления был размещен на одной из панелей.

Я пытался обработать событие OnControlAdded, но это не сработало ...

Ответы [ 2 ]

5 голосов
/ 13 января 2010

Маркус писал: «если другой элемент управления перетащен на мой пользовательский элемент управления в режиме разработки (или добавлен программно во время выполнения), я хочу, чтобы этот элемент управления был размещен на одной из панелей».

Я собираюсь истолковать вышесказанное как означающее, что вы хотите перетаскиваемый элемент времени разработки, чтобы стать дочерним элементом управления одной из двух внутренних панелей вашего UserControl: если это истолкование неверно: не обращайте внимания на следующее:)

Кроме того, просто чтобы избежать путаницы: вы абсолютно правы, когда наблюдаете, что Панели или другие «контейнерные» элементы управления в экземпляре UserControl, помещенном в форму во время разработки, не «потребляют» или «глотают» "перетащил элементы управления, как вы могли ожидать: на самом деле вы не можете даже выбрать их по отдельности: они добавляются в ControlCollection UserControl.

К счастью для вас, в случае перетаскивания во время разработки есть хороший пример твердого кода, который вы можете изучить и использовать в CodeProject от Генри Минута: Проектирование вложенных элементов управления : эта статья покажет вам, как наследовать от ParentControlDesigner, чтобы дочерние элементы управления , которые являются контейнерами UserControl во время разработки, могли функционировать как контейнеры так, как вы ищете.

В случае, если вы хотите, чтобы потребитель вашего элемента управления во время выполнения (программист) ... предполагал, что у них нет источника, поэтому они взаимодействуют с вашим UserControl как «черный ящик», способный «видеть» только Свойства и Методы, доступные События и т. д., которые вы сделали Публичными ... для управления размещением добавленного элемента управления: вам нужно принять решение о том, как вы хотите, чтобы потребитель получал доступ к панелям. Вы можете выставить их «напрямую» как объекты через публичные свойства UserControl, или вы можете выставить только публичный метод для добавления элементов управления для каждой панели.

0 голосов
/ 13 января 2010

Почему бы просто не перетащить его на панель или не предоставить общедоступному доступу к одной из панелей и не выполнить все свои программные добавления непосредственно на эту панель?

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