C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 【VB6】共用フォームを利用する場合のコーディングについて


(過去ログ 91 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■54258 / inTopicNo.1)  【VB6】共用フォームを利用する場合のコーディングについて
  
□投稿者/ Elldorado (1回)-(2010/10/12(Tue) 09:12:12)

分類:[VB6 以前] 

お世話になります。

OS:WindowsXP Pro + SP3
VisualBasic Ver6.0 + SP5

・Project1
  form1
  form2

・Project2
  form1
  form3

VB6のプロジェクトが以上のように2つあるとします。
form1は両方のプロジェクトで使う共通のフォーム(画面)です。

form1に在るコマンドボタンを押下した時に、
プロジェクト1の場合はform2を表示(show)
プロジェクト2の場合はform3を表示(show)したい場合
どの様にコーディングすれば良いでしょうか?

ある条件の場合は form2.show、ある条件の場合は form3.show と
コーディングするとプロジェクト内に含まれないフォーム名を
記述しているのでエラーになります。

よろしくお願い致します。

引用返信 編集キー/
■54259 / inTopicNo.2)  Re[1]: 【VB6】共用フォームを利用する場合のコーディングについて
□投稿者/ shu (93回)-(2010/10/12(Tue) 09:19:37)
No54258 (Elldorado さん) に返信
form1のプロパティに例えばSForm as FormをPublicで宣言
ここでSFormに値を設定したときprivate変数m_SForm as Formに設定値が入るものとする
form1を開くときにShowまたはShowDialogをする前にSFormにform2とかform3とかを設定
form1のコマンドボタンのクリックでm_SFormに対しShowをする。

引用返信 編集キー/
■54260 / inTopicNo.3)  Re[1]: 【VB6】共用フォームを利用する場合のコーディングについて
□投稿者/ 魔界の仮面弁士 (1860回)-(2010/10/12(Tue) 09:35:08)
No54258 (Elldorado さん) に返信
> VB6のプロジェクトが以上のように2つあるとします。
> form1は両方のプロジェクトで使う共通のフォーム(画面)です。
その構成では共有できません。
共通のフォームにするのであれば、下記のような手法が考えられます。

(案1) 両EXEに、同じフォームを含めてそれぞれコンパイルする。
(案2) form1 用の ActiveX DLL プロジェクトを別途用意し、それを両プロジェクトから呼び出す。
(案3) Form1 側をスタンドアロン型の ActiveX EXE にし、他方から利用できるようにする。
(案4) Form1 側を常駐させておき、非表示にしておいた form1 を DDE なり API なりで再表示させて利用。


案1 は、単純にソースコードの複製です。その意味で、厳密には共有ではありません。

案4 は、別プロセスでの起動となりますので、データ交換やフォーカス制御が厄介になります。

案2, 案3 なら共有できますが、レジストリ(あるいはマニフェスト)への登録が必要になりますし、
一度リリースした後では、インターフェイスをうかつに変更できないという制限がつきます。


ActiveX でのフォーム連携の方法は、VB6 付属の MSDN ライブラリに同梱されている
 Coffee2.vbp サンプル アプリケーション
 CoffWat2.vbp サンプル アプリケーション
を参照してみてください。なお、ヘルプで下記の項目も参照してみてください。

[Visual Basic ドキュメント]
└[Visual Basic の使用方法]
 └[コンポーネント ツール ガイド]
  └[ActiveX コンポーネントの作成方法]
   └[ActiveX EXE コンポーネントの作成手順]
    └[アウトプロセスのモーダル フォームとモードレス フォームの動作]


> OS:WindowsXP Pro + SP3
> VisualBasic Ver6.0 + SP5
ちなみに、XP SP3 に同梱されている VB6 ランタイムは、SP5 より後の物です。

VB6 の MSVBVM60.DLL バージョン:
 v6.0.81.76(SP無), v6.0.82.68(SP2), v6.0.84.95(SP3), v6.0.88.77(SP4), v6.0.89.64(SP5), v6.0.97.82(SP6)
WinXP で提供される MSVBVM60.DLL:
 v6.0.92.37(XP SP無/SP1), v6.0.96.90(XP SP2), v6.0.98.2(XP SP3)
引用返信 編集キー/
■54262 / inTopicNo.4)  Re[2]: 【VB6】共用フォームを利用する場合のコーディングについて
□投稿者/ Elldorado (2回)-(2010/10/12(Tue) 10:16:26)
No54259 (shu さん) に返信
> ■No54258 (Elldorado さん) に返信
> form1のプロパティに例えばSForm as FormをPublicで宣言
> ここでSFormに値を設定したときprivate変数m_SForm as Formに設定値が入るものとする
> form1を開くときにShowまたはShowDialogをする前にSFormにform2とかform3とかを設定
> form1のコマンドボタンのクリックでm_SFormに対しShowをする。

質問を簡略化するために省いていましたが実際のプロジェクトにはメニュー画面、標準モジュール等が存在します(情報後出しですみません)

・標準モジュールで、SForm as FormをPublicで宣言
・メニュー画面のForm_Loadイベントで Set SForm = form2(Project2では Set SForm = form3)を記述
・form1のコマンドボタン押下イベントで SForm.Show を記述

以上のようにコーディングすることにより、希望通りの動作が実現できました。ありがとうございました。

引用返信 編集キー/
■54263 / inTopicNo.5)  Re[2]: 【VB6】共用フォームを利用する場合のコーディングについて
□投稿者/ Elldorado (3回)-(2010/10/12(Tue) 10:25:37)
No54260 (魔界の仮面弁士 さん) に返信
> ■No54258 (Elldorado さん) に返信
>>VB6のプロジェクトが以上のように2つあるとします。
>>form1は両方のプロジェクトで使う共通のフォーム(画面)です。
> その構成では共有できません。
> 共通のフォームにするのであれば、下記のような手法が考えられます。
>
> (案1) 両EXEに、同じフォームを含めてそれぞれコンパイルする。
> (案2) form1 用の ActiveX DLL プロジェクトを別途用意し、それを両プロジェクトから呼び出す。
> (案3) Form1 側をスタンドアロン型の ActiveX EXE にし、他方から利用できるようにする。
> (案4) Form1 側を常駐させておき、非表示にしておいた form1 を DDE なり API なりで再表示させて利用。
>
> 案1 は、単純にソースコードの複製です。その意味で、厳密には共有ではありません。

「共用」という言葉は間違っていたかもしれません。

form1に何らかの仕様変更、修正が発生した場合に1つのフォームを修正するだけで済むようにしたかっただけです。
※form1の修正後にはProject1、Project2両方のコンパイルは行います。

そういう意味では魔界の仮面弁士さんが言うところの案1のようですね。


>>OS:WindowsXP Pro + SP3
>>VisualBasic Ver6.0 + SP5
> ちなみに、XP SP3 に同梱されている VB6 ランタイムは、SP5 より後の物です。
>
> VB6 の MSVBVM60.DLL バージョン:
>  v6.0.81.76(SP無), v6.0.82.68(SP2), v6.0.84.95(SP3), v6.0.88.77(SP4), v6.0.89.64(SP5), v6.0.97.82(SP6)
> WinXP で提供される MSVBVM60.DLL:
>  v6.0.92.37(XP SP無/SP1), v6.0.96.90(XP SP2), v6.0.98.2(XP SP3)

SPの導入順序に気をつけるようにします。ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -