Как встраивать формы ms-доступа в С# -модуль?

Мы разработали довольно тяжелое приложение для доступа к ms, с 300 формами (да!). Поскольку код создает эти формы (и не просто "открывает" их), мы можем иметь несколько экземпляров одной и той же формы, отображаемой на экране.

Чтобы обойти ограничения VBA и его плохую реализацию некоторых объектно-ориентированных понятий, таких как наследование, интерфейс, инкапсуляция и т.д., код управляет:

  • коллекция окон, сделанная из всех активных экземпляров наших форм.
  • объект 'ghost windows', который содержит все дополнительные свойства и методы, необходимые для нашего кода.

Итак, в качестве примера, когда я хочу достичь стандартного свойства одного из моих экземпляров, я могу написать:

MyWindows.accessWindow(hWnd).name 

Где hWnd - дескриптор, заданный Windows, и назовите стандартную форму(). name property

Но если я хочу достичь определенного свойства одного из моих экземпляров, я могу написать:

MyWindows.ghostWindow(hWnd).originalRecordset

Где 'originalRecordset' содержит исходный ADODB.recordset, который был загружен, когда форма была впервые установлена ​​(значение перед любыми изменениями, внесенными пользователем... может быть интересно!)

Он отлично работает, но его кодирование может быть настоящим PITA, особенно когда известно, как можно было бы сделать что-то подобное в С#, если бы он мог инкапсулировать объект формы MS-Access в более общий объект С#, Итак, вот в чем вопрос: можно ли внедрить форму MS-Access в самодельную С# dll? Возможно ли это?

Я не ожидаю полного ответа, но я ожидаю некоторую помощь, чтобы попасть на правильный путь. Любая идея приятелей?

Ответ 1

Это должно выполняться через Office Automation.

Короче говоря, вы используете С# для запуска вашего приложения доступа, а затем получите подходящую объектную модель для своих форм, так же, как вы их используете в vba.

Это, вероятно, первый шаг, если вы хотите использовать больше С# (хорошо) и меньше vba (meh), чтобы постепенно улучшать/реорганизовывать ваше приложение доступа.

Подробнее в статье MS KB "Как автоматизировать Microsoft Access с помощью Visual С#"