Как встраивать формы 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 С#"