MS Access Tips/Sample and VBA and Blog customize etc...

画面遷移で、呼び出し元のフォームに戻る

親フォームから子フォームを開き、親フォームは非表示にします。子フォームを閉じると親フォームに戻るようにしたいです。子フォームは複数のフォームから呼び出されるので、呼び出し元のフォームを取得してそのフォームへ戻る(非表示から表示に切り替える)にはどうしたらいいでしょうか。

たぶん、どこかに転がっていると思いますが、掲示板回答用にコーディングしたので2種類の方法を紹介しておきます。

呼び出し元フォームへ戻る

難易度:

OpenArgs の利用

OpenFormメソッドのOpenArgs引数でフォーム名を渡すというのがよく使われますね。

親フォームのイベントプロシージャ

子フォームのイベントプロシージャ

フォームを開くボタンクリック時でのエラー処理は、フォームを開くのをキャンセルしたり、失敗したとき、自フォームが非表示になるのを防ぐためです。

Screen.ActiveForm で取得

フォームの開くときイベントでのアクティブァフォームが、呼び出し元フォームであるという性質を利用する方法もあります。

親フォームのイベントプロシージャ

子フォームのイベントプロシージャ

呼び出し元のフォームを非表示にするのを、呼び出される側のモジュールでしてみました。これなら、呼び出す側のエラー処理を省略しても呼び出し側が非表示のままということはないです。

また、レポートを開くときにも上記の2つの方法は同様に使えますが、AccessXP以前の OpenReportメソッドには、OpenArgs引数はないので、後者の方法を使うことになります。

蛇足

OpenArgs引数にはバグがあり、何かのひょうしに Nullになるという話をまれに聞くことがあります。WEB検索しても数件、引っかかります。ただ、どれも再現性が曖昧です。私自身は経験がないし、MSからの正式な情報も下記以外は見当たりません。

[ACC2002] OpenArgs プロパティを設定しても値が反映されない

これは、既に開いてるフォームに対しての現象ですし、Service Pack で修正されていることなので、上記での話とはまた違います。

これを気にするなら、OpenArgs引数の使用は避けた方がいいということになりますが、便利なものなので、私自身は気にせずに使っています。

経験があるよ、という方が見えましたら、コメントしてください。


拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/284-a4f0ad69
該当の記事は見つかりませんでした。