Создание контроля над детьми как IContainer

2

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

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

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

Спасибо!

изменить

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

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

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

  • 0
    В дополнение к вопросу, заданному Йеном Рингрозом выше: imho было бы хорошо, если бы вы рассказали нам о том, чего вы пытаетесь достичь здесь: Что вы хотите сделать во время разработки; какое поведение вы хотите во время выполнения? Для Panel, которая (я полагаю) наследуется от интерфейса IContainerControl: реализовали ли вы: 'IContainerControl.ActiveControl' и 'System.Windows.Forms.IContainerControl.ActivateControl (System.Windows.Forms.Control)'?
  • 0
    Отредактированный вопрос, чтобы надеяться помочь некоторым.
Теги:
winforms
containers
controls

1 ответ

2
Лучший ответ

Я думаю, у вас здесь две стратегии: сначала "дешевый материал":)

Стратегия дешевого товара:

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

    а. создать два UserControls

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

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

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

    е. создайте оба UserControls

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

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

Расходы/преимущества:

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

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

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

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

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

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

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

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

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

  • 0
    Спасибо! Между этими двумя ссылками, которые вы предоставили, я думаю, что смогу кое-что выяснить.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню