私たちは、約 300 のフォーム (はい!) を含む、非常に重い ms-access アプリを開発しました。コードがこれらのフォームをインスタンス化するため (フォームを「開く」だけでなく)、同じフォームの複数のインスタンスを画面に表示できます。
VBA の制限と、継承、インターフェイス、カプセル化などの一部のオブジェクト指向の概念の不十分な実装を回避するために、コードは以下を管理しています。
- フォームのすべてのアクティブなインスタンスから作成されたウィンドウ コレクション。
- コードに必要な追加のプロパティとメソッドをすべて保持する「ゴースト ウィンドウ」オブジェクト。
したがって、例として、インスタンスの 1 つの標準プロパティに到達したい場合は、次のように記述できます。
MyWindows.accessWindow(hWnd).name
hWnd は Windows によって指定されたハンドルで、標準の form().name プロパティに名前を付けます。
しかし、インスタンスの 1 つの特定のプロパティにアクセスしたい場合は、次のように記述できます。
MyWindows.ghostWindow(hWnd).originalRecordset
「originalRecordset」には、フォームが最初にインスタンス化されたときにロードされた元の ADODB.recordset が保持されます (つまり、ユーザーが変更を加える前に... 興味深いものになる可能性があります!)。
それはうまく機能していますが、MS-Accessフォームオブジェクトをより一般的なC#オブジェクトにカプセル化できる限り、C#で同様のことを行うことがどれほど驚くべきことかを知っている場合は特に、コーディングは本当のPITAになる可能性があります. これが問題です。MS-Access フォームを自作の C# dll に埋め込むことはできますか? それは実現可能ですか?
完全な答えは期待していませんが、正しい軌道に乗るための助けを期待しています. アイデア仲間はいますか?