10

私たちは、約 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 に埋め込むことはできますか? それは実現可能ですか?

完全な答えは期待していませんが、正しい軌道に乗るための助けを期待しています. アイデア仲間はいますか?

4

1 に答える 1

3

これは、Office オートメーションを介して実行できるはずです。

つまり、C# を使用して Access アプリケーションを起動し、vba で使用できるのと同じ方法で、フォームに適切なオブジェクト モデルを取得します。

アクセス アプリを徐々に改善/リファクタリングするために、C# をより多く使用し (良い)、vba をより少なく使用したい場合は、おそらく最初のステップです。

詳細については、MS KB 記事「Visual C# を使用して Microsoft Access を自動化する方法」を参照してください。

于 2012-12-20T09:32:03.513 に答える