• ベストアンサー

サブフォームのイベントを取得するには?

同じソリューションにフォームA、フォームBがあり、フォームBは フォームAから起動されます。 フォームBがクローズした時、フォームAのメソッドを走らせたい のですが、その手段がわからず困っています。 別のフォームのイベントを取得する方法をご存知でしたら、 ご教授ください。 宜しくお願いします。

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

  • ベストアンサー
回答No.1

起動というのは、モーダルダイアログではないと仮定しての回答です。 Form1(質問のフォームA)のButton1でForm2(質問のフォームB)を起動。 DisposedまたはFormClosedイベントのどちらかを使用して下さい。 Public Class Form1 Private WithEvents a As Form2 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click a = New Form2 a.Show() End Sub Private Sub a_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles a.Disposed MsgBox("DISPOSED") a = Nothing End Sub Private Sub a_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles a.FormClosed MsgBox("CLOSED") a = Nothing End Sub End Class

ginfix
質問者

お礼

ありがとうございます。 参考にさせていただき、目的の動作を実現できました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • NYOI
  • ベストアンサー率58% (56/96)
回答No.2

フォームAの方に以下のメソッドを用意します。 Public Sub FormB_Closed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) MessageBox.Show("FormBが閉じられたよ!") '実際はこの部分に行いたい処理を書く End Sub フォームBのLoadイベントに、以下の様にコードを書きます。 Private Sub FormB_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load AddHandler Me.FormClosed, AddressOf FormA.FormB_Closed End Sub これで、フォームBが閉じられたとき(正確にはFormB.FormClosedイベントが発生したとき)に、FormAのFormB_Closedメソッドが呼び出されるようになります。

ginfix
質問者

お礼

ありがとうございます。 参考になりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • サブフォームのイベント取得

    親フォームからサブフォームのレコード移動時、クリック時等のイベントを取得できるのでしょうか? また、同様に親フォームからサブフォームの中のサブフォームのイベントを取得することができるのでしょうか? ご存じの方がいらっしゃいましたらご教授よろしくお願いします。

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

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

  • 別のフォームへ値を渡したい。

    VB2005環境です。 同じソリューションに、フォームAとフォームBの2つのフォームが 存在しています。 フォームAはDBに接続して値を取得し、それをグリッドやテキスト ボックスなどに表示するのですが、そのフォームAが取得した値を フォームBも使いたいのです。 フォームBはフォームAから起動されるので、フォームBのロード時に フォームAの値を使えたらと思うのですが、サンプルコードを交えて ご教授願えないでしょうか? いくつか方法があるとは思うのですが、フォームAはたくさんの 値(大きさではなく種類)があるので、多くのデータを簡単に 受け渡せるような方法であるとありがたいです。 よろしくお願いします。

  • 別フォームから戻ったときのイベント

    VB.NETの質問です。 フォームA(以下A)から、フォームB(以下B)を モーダル表示で呼びだした後Bを閉じて、Aに戻ったときに、 フラグを立てたいと思っています。 このタイミングのイベントは どのようにして取ればよいのでしょうか? ちなにみAのActivatedイベントで試してみたのですが、 結果NGでした。 Aの上にBが重なっている状態で Bの部分的に見える箇所を一瞬クリックしても Activatedイベントが実行されてしまい、 フラグが立ってしまします。 もちろんモーダル表示なので、Aが前面にくることは ないのですが、なぜかActivatedイベントが実行されてしまいます。 きちんとBを閉じて、Aに戻った時に限り フラグを立てたいと思っています。 Bを閉じた時にB側でフラグを立てる方法もありますが、 仕様の都合上、A側で処理をさせたいのです。 以上、わかりづらいかもしれませんが ご存じの方がいましたらご教授ください。

  • サブフォームの切り替え方を教えてください

    ACCESS97のVBAでアプリケーションを作成しています。 その中でメインメニューのボタンを押した時に新しいフォームとその中のサブフォームが表示されるような処理を行っているのですが、基本的にフォームは同じのを使いまわし、その中のサブフォームをイベントによって切り替えたいのです(例えばメニュー画面でAのボタンをクリックしたら新しいフォームとその中のAAのサブフォームが、メニューのBのボタンをクリックしたらBBのサブフォームが表示するなど)。どなたか良い方法を知っていましたら教えてください。

  • AccessVBA全てのコントロールのイベントを取得したいです。

    AccessVBA全てのコントロールのイベントを取得したいです。 フォーム上にコントロールが20個ほどあります。 現在は抽出ボタンを使用し、抽出実行イベントを行っています。 出来れば、すべてのAfterUpdate()で抽出実行させたいのですが、 コードの書き方がわかりません。 全てのコントロールに対しAfterUpdate()のイベントを書くしか方法はないでしょうか? フォーム内どのコントロールでも抽出実行Functionさせたいです。 ExcelVBAの様にシート内の全てのChangeイベントの様な取得方法はないものでしょうか? ご存じの方がおられましたら、アドバイスよろしくお願いいたします。 m(_ _)m

  • Access レコード移動時イベントでサブフォーム

    お世話になります。 親フォーム Aがあります。(データソースが存在します) その中にサブフォームBがあります。(データソースが存在します) 親フォームのレコード移動時のイベントで、いつもサブフォームのレコードの最後を表示したいのです。そこで・・・ 親フォームAの レコード移動時イベントに Private Sub Form_Current() Me.B.SetFocus DoCmd.GoToRecord , , acLast End Sub 上記を記述すると、一番初めはきちんとサブフォームBのレコードは最後を表示するのですが、以後、親フォームのレコードを動かすと、親フォームの最後のレコードをさしっぱなしになってしまいます。 Me.B.SetFocus DoCmd.GoToRecord , , acLast これの後にどんな記述をすれば、親フォームのレコードを動かすと同時にサブフォームBも最後の行に移るようにできますでしょうか? 何卒よろしくお願いいたします。

  • サブフォームでのダブルクリックイベント

    Access2003です。 フォームにサブフォームを設置し、直接テーブルを表示させています。 このサブフォームのテーブルのある行をダブルクリックしたら その行のデータを他のフォームのオブジェクトにセットしたいのですが 行や行のデータ全てを取得は出来るのですが、サブフォームのイベントがEnterとExitしかなくて、イベント発生が出来ません。 フォームのダブルクリックでXとYを見て…と思ったのですがサブフォーム上ではフォームのダブルクリックイベントが発生せず。 サブフォームのテーブルはユーザーがソートする事もあるのでベタに上にテキストボックス等を置く事は出来ません。 どうにかダブルクリックで動作させる方法はありませんでしょうか?

  • ACCESS VBAサブフォーム(DATA SHEET)の値の取得方法

    いつもお世話になっております。 ACCESS VBAでメインフォームに貼りついているサブフォームの値をとりたいのですが、うまくいっていません。 現状は module1でaをPublicで宣言 サブフォーム中のFORM_CURRENT()中で me.field1.setfocus a = me.field1.value として取得しています。 (実装ではメインのほうのボタンAを押したときに サブフォーム、FORM_CURRENT()で取得しておいた値を 別の変数に入れようとしています。) サブフォームのみで実行するとうまくいくようですが、 メインフォームに貼り付けるとうまくいかないようです。 (メインフォームに貼り付けて、サブフォームのFORM_CURRENTにブレイクを 貼って止めようとするが止まらない) そこでメインフォームボタンAクリックイベントで dim a1 as integer Forms![mainform]![subform].form.[field1].setfocus a1 = Forms![mainform]![subform].form.[field1].value として値をとろうと思ったのですが メインフォームからサブフォームにフォーカスをうつせない? らしく、サポートされていませんの旨のメッセージがでてしまいます。 やりたいこととしては、メインフォームに貼りついたサブフォームの 選択レコードのフィールド値を、メインフォームのボタンを押したときに 取得する。ということなのですが、うまくいっていません。 別の方法でもいいので、実現方法をご存知の方、よろしくお願いします。 ちなみにACCESSは2000を使用、ADOはサポートされていますがDAOは 非サポートのようです。

  • MS-Access レコードセレクタのイベント

    こんにちは。 MS-Access2003です。レコードセレクタをダブルクリックした時に以下のようなイベントを設定したいと思っています。 1.テーブルの全データを一覧で表示するクエリを連結した、表形式のフォーム(フォームA)が  あり、そのレコードセレクタをダブルクリックします。 2.別に、そのテーブルを連結したフォーム(フォームB)があり、1.でダブルクリックしたデータが、  その「テーブルを連結したフォーム」に表示されて欲しい。 フォームAは参照のみであり、フォームBは更新可能な設定です。 レコードセレクタのイベントはマクロで組みたいのですが、フォームBを開いた後どうすれば そのデータをフォームBでフィルターをかけたように表示できるのかが分かりません。 ご教授いただけると助かります。 よろしくお願いいたします。