Как я могу повторно использовать классы в моем приложении VB6?

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

alt text

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

Когда я щелкаю или изменяю узлы просмотра дерева слева, правые элементы управления изменяют свое отображение соответственно, и наоборот.

Данные, скрытые за сценой, хранятся в базе данных Access.

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

Поэтому я на самом деле ПОВТОРНОЕ ИСПОЛЬЗОВАНИЕ своих классов в режиме «копировать и вставлять». Это работает, но есть проблемы. Если я внесу изменение в класс, мне придется изменить его в нескольких приложениях.

Сейчас я думаю о том, чтобы превратить их в так называемые компоненты ActiveX. Но я не уверен, какие компоненты ActiveX мне следует разработать для повторного использования всей архитектуры.

Короче говоря, я хочу знать, как я могу использовать его более эффективно, чем просто «копировать и вставлять». Ниже приведены некоторые идеи или ожидания нового «изящного ПОВТОРНОГО ИСПОЛЬЗОВАНИЯ», но не ограничиваться ими.

(1) Я надеюсь, что это выглядит как элемент управления ActiveX, у которого есть страница свойств, чтобы я мог установить некоторые его свойства во время разработки.

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

(3) Также мне может потребоваться закодировать новое поведение для просмотра дерева и списка для различных приложений. Это требование делает непригодным полный пользовательский элемент управления для всей формы. потому что MSDN сказал: «Ссылки на элементы управления ActiveX , никогда не должны возвращаться в клиентские приложения。»


person Community    schedule 30.07.2009    source источник


Ответы (3)


  • Создайте ActiveX DLL (не контрольную)
  • Определите интерфейс для формы в DLL.
  • Переместите всю свою логику в один или несколько классов в DLL и пусть процедуры взаимодействуют с формой через интерфейс.
  • Реализуйте Интерфейс в форме
  • При одной инициализации приложения форма регистрируется в ActiveX DLL.

Это эффективно избавит от копирования и вставки между различными приложениями.

Например, для моего приложения для резки металла у меня есть форма формы, класс экрана формы и множество классов форм. Два метода класса shape - это DrawScreen, у которого есть параметры типа ShapeScreen, и GetValues, у которого также есть параметр типа ShapeScreen.

DrawScreen использует метод ShapeScreen для настройки экрана входа и Shape Screen для настройки формы через интерфейс IShapeForm. GetValues ​​использует методы Shape Screen для получения введенных значений формы, которые, в свою очередь, используют IShapeForm для получения значений из формы.

Эта установка оказалась полезной, когда нам приходилось разрабатывать различные формы ввода данных в ответ на запросы клиентов. Новая форма только что реализовала интерфейс IShapeForm, а остальная часть программного обеспечения осталась нетронутой.

person Community    schedule 30.07.2009
comment
Звучит изящно, спасибо. Поскольку я не очень хорошо знаком с ActiveX dll и концепцией интерфейса. Не могли бы вы дать дополнительные пояснения? ShapeScreen - это класс в dll, у которого есть интерфейс IShapeForm. А где классы фигур? Они тоже есть в вашей dll? Короче, просто не могу понять, как реализовать интерфейс в форме? Имеет ли это какое-то отношение к полиморфизму? - person SlowGrace; 30.07.2009
comment
Не могли бы вы дать мне несколько строк кода, чтобы проиллюстрировать всю архитектуру? - person SlowGrace; 30.07.2009
comment
Или вы имеете в виду, что в вашей dll есть класс IShapeForm? Все классы в вашей dll будут взаимодействовать с IShapeForm, когда им нужно, с реальной формой. А когда я использую dll, я зарегистрирую реальную форму в классе IShapeForm. Да, думаю, это ты имел в виду. - person SlowGrace; 30.07.2009
comment
Не могли бы вы привести несколько peudo-кодов, чтобы проиллюстрировать две нижеприведенные задачи? (1) Экран формы настройте форму через интерфейс IShapeForm. (2) использует IShapeForm для получения значений из формы. - person SlowGrace; 30.07.2009
comment
Если вы погуглите это руководство по управлению активным x vb6, это может помочь. - person Gutzofter; 31.07.2009
comment
Книга Дэна Эпплмана Разработка компонентов COM / ActiveX с помощью Visual Basic 6 великолепна. Или просто прочтите руководство программиста VB6, оно действительно очень хорошо объясняет основы. msdn.microsoft.com/en-us/library/aa240845 (VS.60) .aspx - person MarkJ; 24.09.2009

Возможно, мне следует инкапсулировать каждый из элементов управления в пользовательский элемент управления, а затем создать виртуальный элемент управления ActiveX (без визуального интерфейса), чтобы организовать эти элементы управления в единое целое.

person Community    schedule 30.07.2009

Похоже, у вас есть представление, логика домена и данные. Я предвижу, что ваша основная проблема - это пункт два, он не статичен по внешнему виду и логике от приложения к приложению. Может, вам нужно два отдельных элемента управления? Левая панель и правая панель. Правая панель, вероятно, будет реализовывать некоторый массив элементов управления, поскольку они не будут статичными.

person Community    schedule 31.07.2009