2012-12-19 9 views
10

私たちはかなり強力なms-accessアプリを開発しました.300種類のフォーム(はい!)があります。コードがこれらのフォームをインスタンス化し、単にそれらを開くだけではないので、同じフォームの複数のインスタンスを画面に表示させることができます。すべての外に作られた窓のコレクションC#モジュールにms-accessフォームを埋め込む方法は?

  • VBAの制限をバイパスし、そして、そのようななどの継承、インターフェース、カプセル化、などいくつかのオブジェクト指向の概念のその貧弱な実装に、コードが管理しています私たちのフォームのアクティブなインスタンス。

  • 「ゴーストウィンドウ」オブジェクトは、コードに必要なすべての追加のプロパティとメソッドを保持します。

私は私のインスタンスのいずれかの標準プロパティに到達したいときに、一例として、私が書くことができます:

のhWndは、Windowsによって与えられたハンドルです
MyWindows.accessWindow(hWnd).name 

を、標準に名前を付けますフォーム()nameプロパティ

しかし、私は私のインスタンスのいずれかの特定のプロパティに到達したい場合は、私は書くことができます。

MyWindows.ghostWindow(hWnd).originalRecordset 

「起源alRecordset 'は、フォームが最初にインスタンス化されたときに読み込まれた元のADODB.recordsetを保持します(ユーザーが行った変更が面白くてもいい...)。特に、MS-Accessフォームオブジェクトをより一般的なC#オブジェクトにカプセル化できる限り、C#で何か類似したことを行うことができるようになった場合には特にそうです。これは疑問です:MS-Accessフォームを自家製のC#dllに埋め込むことはできますか?実現可能ですか?

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

+2

技術的に印象的な、しかし、商業および保守地雷原で

詳細?あなたは、増分再書き込みを開始する提案。アプリケーションの一部を明確な描写のドメインベースの縦書きに書き直すことは、過去に私のために働いていました。その結果、より多くのC#を得ることができます。 –

答えて

3

これは、Officeオートメーションによって実行可能である必要があります。

要するに、c#を使用してアクセスアプリケーションを起動し、フォームの適切なオブジェクトモデルを取得します(vbaで使用できるように)。

これはおそらく、あなたのアクセスアプリを徐々に改善/リファクタリングするために、より多くのC#(良い)とvba(meh)を使用したい場合は、最初のステップです。 MS KBの記事"How to automate Microsoft Access by using Visual C#"

+1

リンクをありがとう。面白いことがあるかもしれません –

関連する問題