[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/11/03(Fri) 03:24
投稿者名:Seiji
Eメール:
URL :
タイトル:
フォーム起動時にパラメータを渡す方法について
VB6でフォームAからフォームBを起動するときにパラメータを
渡す方法としてはどのような方法が一般的なのでしょうか?
いくつかオプションがある場合はその長所と短所を説明して
いただけませんでしょうか?

投稿時間:2006/11/03(Fri) 07:09
投稿者名:ダンボ
Eメール:
URL :
タイトル:
Re: フォーム起動時にパラメータを渡す方法について
こんにちは。
前提として、フォームAとフォームBは同一EXE内ですね?
データの種類と量によって千差万別ですから、あまり一般論を聞かれても困るでしょ?
TAGプロパティ渡し、グローバル変数渡し、ファイル渡し、クリップボード経由、DDE通信。。。
「パラメータ」というなら極少量の文字列や数値と思われるので「TAGプロパティ渡し、グローバル変数渡し」が一般的とは思います。

投稿時間:2006/11/03(Fri) 09:23
投稿者名:Seiji
Eメール:
URL :
タイトル:
Re^2: フォーム起動時にパラメータを渡す方法について
ダンボさん、

お返事ありがとうございました。

> 前提として、フォームAとフォームBは同一EXE内ですね?

そうです。

>「TAGプロパティ渡し、グローバル変数渡し」が一般的とは思います。

TAGプロパティ渡しについて聞いたことがなかったので、Googleで調べて
大体のイメージはつかめました。また、グローバル変数渡しについては
「なるべくなら使わない方が良い」という趣旨のWebsiteをいくつか
みつけましたので、ちょっと躊躇していました。
よろしかったらそれぞれの長所、短所、使い分け方などについてご意見を
いただけますか?

投稿時間:2006/11/04(Sat) 10:11
投稿者名:ダンボ
Eメール:
URL :
タイトル:
Re^3: フォーム起動時にパラメータを渡す方法について
> TAGプロパティ渡しについて聞いたことがなかったので、Googleで調べて
> 大体のイメージはつかめました。また、グローバル変数渡しについては
> 「なるべくなら使わない方が良い」という趣旨のWebsiteをいくつか
> みつけましたので、ちょっと躊躇していました。

とは言え、フォーム呼び出しに直接の引数/戻り値が用意されていないのだから使用者が
自分の責任で工夫しないとどうしようもないです。グローバル変数渡しの注意は
「モジュール間の結合度を上げてしまう」ということですね。モジュールの独立性を
高めるためには「インタフェースはなるべく必要最小限で1箇所に絞ること。

グローバル変数は「いつでもどこでもだれでも参照・変更できてしまう」というのが短所(&長所)。
TAGプロパティは「インタフェースを一箇所に絞る」意味では最高かな。但しVariant型1個なので
受け渡しに構造体は使えない、Objectは使えない、複数個は工夫が必要。

私だったら情報の出発点はTAGプロパティでそこから付帯情報を引き出すように工夫すると思います。

投稿時間:2006/11/09(Thu) 05:59
投稿者名:Seiji
Eメール:
URL :
タイトル:
Re^4: フォーム起動時にパラメータを渡す方法について
亀レスすみません。
大変参考になりました。
ありがとうございました。

投稿時間:2006/11/03(Fri) 11:14
投稿者名:K.J.K.
Eメール:
URL :
タイトル:
Re: フォーム起動時にパラメータを渡す方法について
例えば、

FormB側では

Private mvData As Variant

Public Function LoadWithArgs(Optional ByVal Args As Variant) As Boolean
    On Error Resume Next
    mvData = Args
    Call Load(Me)
    If Err.Number Then
        Call Err.Clear
    Else
        LoadWithArgs = True
    End If
    On Error GoTo 0
End Function

Private Sub Form_Load()
    Me.Visible = True
End Sub

FormA側では

Private Sub ShowFormB
    Dim wNewFormB As FormB
    Set wNewFormB = New FormB
    Call wNewFormB.LoadWithArgs("送りたいデータ")
End Sub

とでもするとか。

投稿時間:2006/11/04(Sat) 05:37
投稿者名:Seiji
Eメール:
URL :
タイトル:
Re^2: フォーム起動時にパラメータを渡す方法について
K.J.K.さん、

お返事ありがとうございました。
フォームをインスタンス化するという方法も
あるのですね。
参考になりました。ありがとうございます。

投稿時間:2006/11/04(Sat) 08:36
投稿者名:K.J.K.
Eメール:
URL :
タイトル:
Re: フォーム起動時にパラメータを渡す方法について
> フォームをインスタンス化するという方法も
> あるのですね。

そう書くのには、かなりの違和感があるような。

そもそも、ここの説明の主題ではないし、複数種類のFormを使うときの
基本的な方法の1つであるのだから、いまさらこれを取り上げる、という
ようなものでもないでしょう。

提示したコードの主題を何であると考えているのでしょうか?

投稿時間:2006/11/09(Thu) 05:56
投稿者名:Seiji
Eメール:
URL :
タイトル:
Re^2: フォーム起動時にパラメータを渡す方法について
亀レスすみません。

> 複数種類のFormを使うときの
> 基本的な方法の1つであるのだから、いまさらこれを取り上げる、という
> ようなものでもないでしょう。

初心者なので「基本的な方法の1つ」も知りませんでした。
そもそも、このスレッドの目的はどういった「基本的な方法」があって、
どう使い分けたら良いのかご意見をもらうことです。
ですので、大変参考になりました。

> 提示したコードの主題を何であると考えているのでしょうか?

恐らく、K.J.Kさんはフォームをインスタンス化すること以外に
ポイントがあるとおっしゃりたいのでしょうが、私にはそこまで読み取れませんでした。
よろしかったら、説明していただけませんか?

投稿時間:2006/11/09(Thu) 09:38
投稿者名:K.J.K.
Eメール:
URL :
タイトル:
Re: フォーム起動時にパラメータを渡す方法について
主題は、あなたのつけたタイトルがあらわすものそのものです。
それに対しての直接の回答です。

投稿時間:2006/11/09(Thu) 10:45
投稿者名:Seiji
Eメール:
URL :
タイトル:
Re^2: フォーム起動時にパラメータを渡す方法について
> そう書くのには、かなりの違和感があるような。
> そもそも、ここの説明の主題ではないし、複数種類のFormを使うときの
> 基本的な方法の1つであるのだから、いまさらこれを取り上げる、という
> ようなものでもないでしょう。
> 提示したコードの主題を何であると考えているのでしょうか?

> 主題は、あなたのつけたタイトルがあらわすものそのものです。
> それに対しての直接の回答です。

う〜ん。おっしゃってることを理解できているかあまり自信がありませんが、
「フォームをインスタンス化するという方法」という表現が正確ではなく、
「パラメータを受け取るFunctionを含むフォームをインスタンス化する」
であるべきだとおっしゃりたいのだと推測します。。。

投稿時間:2006/11/09(Thu) 11:37
投稿者名:K.J.K.
Eメール:
URL :
タイトル:
Re: フォーム起動時にパラメータを渡す方法について
> 「フォームをインスタンス化するという方法」という表現が正確ではなく、
> 「パラメータを受け取るFunctionを含むフォームをインスタンス化する」

ここから、更に不要なところを取り除いて、
「パラメータを受け取るメソッドとして実装する」
とすればいいでしょう。

投稿時間:2006/11/09(Thu) 12:01
投稿者名:Seiji
Eメール:
URL :
タイトル:
Re^2: フォーム起動時にパラメータを渡す方法について
> ここから、更に不要なところを取り除いて、
> 「パラメータを受け取るメソッドとして実装する」
> とすればいいでしょう。

了解です。ありがとうございました。