- ベストアンサー
他のモジュールのプロシージャの呼び出したい。
VB6でForm間でのプロシージャの呼び出しができなくて困っています。 例えば、Form1,Form2のフォームを2つ用意し、Form2上にCommand1というコマンドボタンを配置します。 Form1でForm2のCommand1_Clickするには、Form1のコードで、Call Form1.Command1_Click ではだめなのでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
自動的に作られるイベントプロシージャは「Private」指定ですから、 Formの外からは参照できません。 「Public」に変更すれば、外部から参照可能になります。 #「イベントプロシージャを外部から直接呼び出す」という #プログラムが良いかどうかの議論は止めておきます。
その他の回答 (4)
- noro6677
- ベストアンサー率21% (34/158)
#3さんのはなしはVB.netでの話です。 (VB6でもFormをクラスで扱うこともできるが)
お礼
そうだったんですね。 ありがとうございます。
- dsuekichi
- ベストアンサー率64% (171/265)
#1です。 > フォーム間でプロシージャのやり取りをするには本来どういった > 方法で行うのがいいでしょうか? プロシージャのやり取り(呼び出し)自体は構わないと思います。 但し、本来Priveteであるべき(Form1の内部処理である)「イベントプロシージャ」を直接呼び出すのはちょっと・・・ という事です。 これは、#2さんが言われている様に、 他の画面からも行いたい処理は、別に「公開用(共通処理)」として用意しておくのが良いと思います。 Form1に依存する動作が多い(Form1の複数のコントロールのプロパティ等を参照・操作するとか)なら、Form1内に用意し、 それほど依存しないなら、標準モジュールで用意します。 余談ですが、『「CommanButtonのClickイベント」を発生させる』事に限定するなら、 Form1.Comman1.Value=True を実行することで、発生させることも可能です。
お礼
ありがとうございます。 あくまで例として今回CommandButtonを用いていましたが、 プロシージャのやり取りは使われているんですね。 Form1.Comman1.Value=True という使い方も知りませんでした。 今後活用させていただきます。
- qwertfk
- ベストアンサー率67% (55/81)
回答というより、確認に近いかもしれませんが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というものを指して表現しているのですが。
- noro6677
- ベストアンサー率21% (34/158)
#1さんの方法で確かにできますが個人的にはそのやり方はNG。 どしても呼び出したければかの処理を関数化しておきCommand1_Clickからも Form2.Command2_Clickからも同じ物を呼び出せばいい。
お礼
ありがとうございます。
お礼
ありがとうございます。 できました。 Form1に Private Sub Command1_Click() Form2.Show Call Form2.Command1_Click End Sub Form2に Public Sub Command1_Click() Command1.Enabled = False End Sub と入れて「他のモジュールのプロシージャの呼び出したい。」が確認できました。 初心者の質問で申し訳ないのですが、 ”#「イベントプロシージャを外部から直接呼び出す」という #プログラムが良いかどうかの議論は止めておきます。” とコメントいただきましたが、フォーム間でプロシージャのやり取りをするには本来どういった方法で行うのがいいでしょうか? もしよろしければ、ご助言お願いいたします。