dポイントプレゼントキャンペーン実施中!

VB6でForm間でのプロシージャの呼び出しができなくて困っています。

例えば、Form1,Form2のフォームを2つ用意し、Form2上にCommand1というコマンドボタンを配置します。
Form1でForm2のCommand1_Clickするには、Form1のコードで、Call Form1.Command1_Click ではだめなのでしょうか。

A 回答 (5件)

自動的に作られるイベントプロシージャは「Private」指定ですから、


Formの外からは参照できません。

「Public」に変更すれば、外部から参照可能になります。

#「イベントプロシージャを外部から直接呼び出す」という
#プログラムが良いかどうかの議論は止めておきます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
できました。
Form1に
Private Sub Command1_Click()
Form2.Show
Call Form2.Command1_Click
End Sub

Form2に
Public Sub Command1_Click()
Command1.Enabled = False
End Sub

と入れて「他のモジュールのプロシージャの呼び出したい。」が確認できました。

初心者の質問で申し訳ないのですが、
”#「イベントプロシージャを外部から直接呼び出す」という
#プログラムが良いかどうかの議論は止めておきます。”
とコメントいただきましたが、フォーム間でプロシージャのやり取りをするには本来どういった方法で行うのがいいでしょうか?
もしよろしければ、ご助言お願いいたします。

お礼日時:2007/03/15 08:57

#3さんのはなしはVB.netでの話です。


(VB6でもFormをクラスで扱うこともできるが)
    • good
    • 0
この回答へのお礼

そうだったんですね。
ありがとうございます。

お礼日時:2007/03/16 12:45

#1です。



> フォーム間でプロシージャのやり取りをするには本来どういった
> 方法で行うのがいいでしょうか?

プロシージャのやり取り(呼び出し)自体は構わないと思います。
但し、本来Priveteであるべき(Form1の内部処理である)「イベントプロシージャ」を直接呼び出すのはちょっと・・・
という事です。

これは、#2さんが言われている様に、
他の画面からも行いたい処理は、別に「公開用(共通処理)」として用意しておくのが良いと思います。

Form1に依存する動作が多い(Form1の複数のコントロールのプロパティ等を参照・操作するとか)なら、Form1内に用意し、
それほど依存しないなら、標準モジュールで用意します。


余談ですが、『「CommanButtonのClickイベント」を発生させる』事に限定するなら、
Form1.Comman1.Value=True
を実行することで、発生させることも可能です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
あくまで例として今回CommandButtonを用いていましたが、
プロシージャのやり取りは使われているんですね。

Form1.Comman1.Value=True
という使い方も知りませんでした。
今後活用させていただきます。

お礼日時:2007/03/16 12:50

回答というより、確認に近いかもしれませんがForm1、Form2はそれぞれクラス名、インスタンス名のどちらでしょうか。

質問の内容からすれば、なんとなくForm1、Form2がクラスのように感じるのですが。もしそうでなければ聞き流してください。
Form1、Form2をクラスと考えているなら、Form2.Command1_Clickというような呼び出しは、共有メソッドにしか使用することはできません。
ただし、Command1_Clickはおそらくハンドラなので、共有メソッドではないはずです。
たとえば、
Class Form1
Dim f2 as Form2
Sub asdf()
f2.Command1_Click(f2.Command1,new System.Eventargs())
End Sub
End Class
というような構造になっていなければ呼び出せません。

この回答への補足

すみません。初心者であまりよくわかっていないです。
VBを立ち上げて最初にあらわれるForm1というものを指して表現しているのですが。

補足日時:2007/03/15 08:58
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2007/03/15 08:59

#1さんの方法で確かにできますが個人的にはそのやり方はNG。


どしても呼び出したければかの処理を関数化しておきCommand1_Clickからも
Form2.Command2_Clickからも同じ物を呼び出せばいい。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2007/03/15 09:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A