• ベストアンサー

他フォームのクリックイベント取得

VS2005を使ってちょこちょこプログラムの勉強をしています。 現在、同一ソリューション内のフォームの間のイベントを実装出来なくて困っています。 やりたい事は Form1から、Form2を起動し、Form2のボタンをクリックした時に、 Form1でForm2のクリックイベントを取得したいのです。 自分なりに調べてみましたが、該当するようなところが中々見つかりませんでした。 わかる方いましたら、ご教示お願いします。 足らない情報等ありましたら、ご指摘ください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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

kouyo_1
質問者

お礼

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

その他の回答 (2)

  • gcqd75ce
  • ベストアンサー率8% (6/67)
回答No.2

フォームをたくさん使う必要があるのかどうか、よく検討したほうがいいですよ。 1枚のフォームで十分な場合が多そうですけど。

kouyo_1
質問者

お礼

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

  • uruz
  • ベストアンサー率49% (417/840)
回答No.1

Form1内にPublicで宣言したプロシージャを 用意しておき、Form2のクリックイベント でそのプロシージャを呼び出せばいいのでは

kouyo_1
質問者

お礼

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

関連するQ&A

専門家に質問してみよう