0

まず、私はVB6を使用しているので、VB6に適用される手法にあなたの親切な提案を限定してください。

代替テキスト

上の図に示すように、相互に関連する一連のコントロールがあります。これには、いくつかのツリービュー、分割バー、リストビュー、サブフォーム(ユーザーコントロール)などが含まれます。

左側のツリービューノードをクリックまたは変更すると、右側のコントロールはそれに応じて表示を変更し、その逆も同様です。

舞台裏のデータはAccessデータベースに保持されています。

このデータ管理と表示のセットは、いくつかの異なるアプリケーションで使用されます。そこで、ロジックを実装し、これらのクラスモジュールをアプリケーションに何度も含めるために、いくつかのクラスを作成しました。

そのため、実際には「コピーアンドペースト」モードでクラスを再利用しています。動作しますが、問題があります。クラスを変更した場合、いくつかのアプリケーションで変更する必要があります。

最近、私はそれらをいわゆるActiveXコンポーネントにすることを考えています。しかし、アーキテクチャ全体を再利用するためにどの種類のActiveXコンポーネントを開発する必要があるのか​​わかりません。

一言で言えば、単に「コピーアンドペースト」するよりも、どうすればもっと優雅に再利用できるのか知りたいです。以下は、新しい「優雅な再利用」のいくつかのアイデアまたは期待ですが、それらに限定されません。

(1)デザイン時にいくつかのプロパティを設定できるように、プロパティページを持つActiveXコントロールのように見えることを願っています。

(2)アプリケーションが異なれば、右側のサブフォームは異なる情報を表示し、異なるコントロールを持ち、追加のコーディングと設計が必要になる場合があります。

(3)また、さまざまなアプリケーションのツリービューとリストビューの新しい動作をコーディングする必要があるかもしれません。この要件により、フォーム全体のユーザーコントロール全体が適切ではなくなります。MSDNは、「ActiveXコントロールへの参照は、クライアントアプリケーションに返さないでください」と述べているためです。

4

3 に答える 3

2
  • ActiveX DLL を作成する (コントロールではない)

  • DLLでフォームのインターフェイスを定義する
  • すべてのロジックを DLL 内の 1 つまたは複数のクラスに移動し、ルーチンがインターフェイスを介してフォームと対話するようにします。
  • フォームにインターフェースを実装する
  • アプリの 1 つの初期化で、フォーム自体が ActiveX DLL に登録されます。

これにより、異なるアプリ間のコピーと貼り付けが効果的に排除されます。

たとえば、私の金属切断アプリケーションには、Shape Form、Shape Screen クラス、および多数の Shape クラスがあります。shape クラスの 2 つのメソッドは、ShapeScreen 型のパラメーターを持つ DrawScreen と、同じく ShapeScreen 型のパラメーターを持つ GetValues です。

DrawScreen は ShapeScreen のメソッドを使用してエントリ画面をセットアップし、Shape Screen は IShapeForm インターフェイスを介してフォームをセットアップします。GetValues は、Shape Screen メソッドを使用して入力された形状値を取得し、次に IShapeForm を使用してフォームから値を取得します。

このセットアップは、顧客の要求に応じてさまざまな形状の入力フォームを開発する必要があったときに役立ちました。新しいフォームは IShapeForm インターフェイスを実装しただけで、残りのソフトウェアは変更されていません。

于 2009-07-30T13:01:37.917 に答える
0

おそらく、各コントロールをユーザー コントロールにカプセル化し、仮想 ActiveX コントロール (ビジュアル インターフェイスなし) を作成して、これらのコントロールを 1 つのものに編成する必要があります。

于 2009-07-30T11:00:35.457 に答える
0

あなたが持っているのは、ビュー、ドメイン ロジック、およびデータのようです。私が予見するあなたの主な問題は項目 2 です。これは、アプリからアプリへの外観とロジックが静的ではありません。たぶん、必要なのは 2 つの別々のコントロールですか? 左パネルと右パネル。右側のパネルは、静的ではないため、コントロールの型配列を実装する可能性があります。

于 2009-07-31T04:25:31.400 に答える