Мы разработали довольно тяжелое приложение для доступа к 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? Возможно ли это?
Я не ожидаю полного ответа, но я ожидаю некоторую помощь, чтобы попасть на правильный путь. Любая идея приятелей?