アプリ版:「スタンプのみでお礼する」機能のリリースについて

VS2005を使ってちょこちょこプログラムの勉強をしています。
現在、同一ソリューション内のフォームの間のイベントを実装出来なくて困っています。
やりたい事は

Form1から、Form2を起動し、Form2のボタンをクリックした時に、
Form1でForm2のクリックイベントを取得したいのです。

自分なりに調べてみましたが、該当するようなところが中々見つかりませんでした。

わかる方いましたら、ご教示お願いします。

足らない情報等ありましたら、ご指摘ください。

A 回答 (3件)

すでに回答が出ていますが「Form2に手を加えない(あるいは加えることが出来ない場合の)」方法を。



※Form2のボタン(Button1)がFriend(またはPublic)で生成されていることが前提です。

方法1:Form1側でForm2のButton1をWithEvent宣言した変数に格納する

[ Form1内 ]
Private WithEvents btnForm2 As Windows.Forms.Button

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim frmNew As New Form2
btnForm2 = frmNew.Button1

frmNew.Show()
End Sub

Private Sub btnForm2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnForm2.Click
Windows.Forms.MessageBox.Show("クリック♪")
End Sub

Private Sub btnForm2_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnForm2.Disposed
' 後始末
btnForm2 = Nothing
End Sub


ただし、この方法では、ボタンを1つしか制御できません。Form2を複数生成する場合は、イベントハンドラを使う方法があります。

方法2:イベントハンドラを手動で追加・削除する

[ Form1内 ]
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim frmNew As New Form2
'* インテリセンスではButton1が出てきませんが、手書きすれば大丈夫です。
AddHandler frmNew.Button1.Click, AddressOf Form2_Button1_Click
AddHandler frmNew.Button1.Disposed, AddressOf Form2_Button1_Disposed

frmNew.Show()
End Sub

Private Sub Form2_Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Windows.Forms.MessageBox.Show("クリック♪")
End Sub

Private Sub Form2_Button1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs)
' 後始末
Dim btnSender As Windows.Forms.Button = CType(sender, Windows.Forms.Button)
RemoveHandler btnSender.Click, AddressOf Form2_Button1_Click
RemoveHandler btnSender.Disposed, AddressOf Form2_Button1_Disposed
End Sub
    • good
    • 2
この回答へのお礼

こういったイベント作成もできるのですね・・・。
とても勉強になりました。
ご回答ありがとうございました。

お礼日時:2009/08/10 18:04

フォームをたくさん使う必要があるのかどうか、よく検討したほうがいいですよ。


1枚のフォームで十分な場合が多そうですけど。
    • good
    • 2
この回答へのお礼

ご意見を参考に、もう一度フォームの必要性を考えましたが、
どうしても必要でした。
ご回答ありがとうございました。

お礼日時:2009/08/10 18:03

Form1内にPublicで宣言したプロシージャを


用意しておき、Form2のクリックイベント
でそのプロシージャを呼び出せばいいのでは
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2009/08/10 18:01

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

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


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