Создание контроля над детьми как IContainer - PullRequest
2 голосов
/ 07 февраля 2010

Я создал класс элемента управления, который наследует элемент управления Panel. Этот элемент управления содержит две другие панели, одной из которых я хотел бы быть IContainerControl.

Я знаю, как превратить весь элемент управления в IContainerControl, но не смог сделать то же самое для дочернего элемента управления. Я пробовал в обоих C # и VB.Net и потерпел неудачу с обоими.

Это имеет смысл? Я попытался найти, но не нашел ничего, что могло бы помочь, надеюсь, кто-то здесь сможет помочь мне!

Спасибо!

1010 * редактировать *

Извините, был долгий день ... Я использую WinForms.

По сути, мне нужен пользовательский пользовательский контроль с двумя панелями: одна отображает статистику, а другая содержит элементы управления. Панель статистики готова и работает, но другая панель может содержать DataGridView, ListView или TreeView (что бы пользователь ни добавил во время разработки).

И да, я реализовал ActiveControl и ActivateControl.

1 Ответ

2 голосов
/ 07 февраля 2010

Я думаю, что у вас есть две стратегии: во-первых, «дешёвка»:)

Стратегия дешевых вещей:

  1. при условии, что конечный пользователь является программистом с исходным кодом, с проектом, открытым в Visual Studio или Mono, способным создавать элементы управления UserControl и перетаскивать выбранные ими элементы управления (такие как Treeview или ListView). Вы упоминаете) на "что угодно."

    а. создать два пользовательских элемента управления

    б. UserControl1 содержит место для двух панелей.

    с. на одной стороне UserControl1 вставьте Panel и создайте ее в соответствии со спецификацией.

    д. на UserControl2: разрешить конечному пользователю вставить элемент управления по своему выбору: TreeView и т. д.

    е. построить оба UserControls

    е. поместите экземпляр UserControl2 (из значка ToolBox) на UserControl1 и расположите его (Dock, Anchor и т. д.) по своему желанию.

Построить снова. Теперь вы можете поместить экземпляр UserControl1 в WinForm, и он будет включать обе панели.

Расходы / выгоды:

  • Вы можете редактировать внешний вид и свойства каждого элемента управления стандартным способом

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

  • у вас есть большее разделение компонентов, которое может облегчить обслуживание или расширение?

  • кто будет заниматься программированием в зависимости от того, выбрал ли пользователь TreeView или ListView для элемента управления для перехода на UserControl2?

Более дорогой Stragegy

Вам нужно перейти к наследованию от 'ParentControlDesigner, чтобы сделать помещенный во время выполнения элемент управления, который является контейнером, помещенным в другой контейнер, для принятия перетаскивания элементов управления во время разработки.

К счастью, есть хорошая статья Генри Минута о CodeProject с источником C #: Проектирование вложенных элементов управления Настоятельно рекомендуем прочитать комментарии Саша Барбера в нижней части этой статьи и ответы Генри Минута.

Также смотрите здесь, в SO: Добавление поддержки времени разработки для вложенного контейнера в пользовательском / пользовательском контроле (Winforms).

В любой из этих стратегий вам нужно будет поработать над тем, чтобы разрешить доступ (какие свойства вы предоставляете, какие события вы вызываете "для вложенных контейнеров и т. Д.).

...