プロが教えるわが家の防犯対策術!

複数の画面のメニューの遷移をスル場合、みなさんは、フォーム名をベタ書きで書いてらっしゃるのでしょうか。それとも、遷移元のフォームの名前を取得して戻るボタンをおした時に、そのフォームをVisible = trueにしたりしているのでしょうか。

私の場合には、ModuleにPublicで宣言した各フォームの階層事の変数に遷移元の名称の場合にだけ、そのフォームの名前を変数に保存して、戻るボタンでそのフォームを表示する処理をしています。
Private Sub Form_Load
module.Public変数 = module.Public遷移元の画面名

End Sub

Private Sub Cmd戻るボタン
Forms(module.Public遷移元の画面名).visible = true
DoCmd.Close acForm, Me.Name

End Sub

しかし、この画面の階層毎に変数をつくり、それに遷移元の画面名をセットするのも面倒くさいやり方で、これよりも何か楽な汎用性のあるやり方はありますでしょうか?

よろしくお願いします。

A 回答 (3件)

補足の意味を読み取れていないような気がしますのでご参考まで。


「履歴としての戻る」と
「メニュー階層の上に戻る」をごっちゃに考えているような?

別解になってしまいますが、
Access2010から利用できるナビゲーションフォームも検討されては?
http://msdn.microsoft.com/ja-jp/library/office/f …
    • good
    • 0
この回答へのお礼

ありがとうございます。

上に戻る場合は、戻る上の画面の名前をそのままベタ書きでもいいのでしょうか。

履歴としての戻るの場合には、その前の画面の名前を取得するので、Form.OpenArgsとか、Screen.ActiveFormなんかで取得ができると思いますが。

このナビゲーションフォームは、全てのフォームが完成してから作成するような感じでしょうか?

お礼日時:2014/12/14 14:34

たとえば呼び出し元で


DoCmd.OpenForm "フォーム名", OpenArgs:=Me.Name
と自身の名前をOpenArgsに渡します。

呼び出された側では
If Me.OpenArgs <> "" Then
If CurrentProject.AllForms(Me.OpenArgs).IsLoaded Then
Forms(Me.OpenArgs).SetFocus
Else

End If
End If
みたいなこととか・・・。
勘違い回答かも。ご参考まで。

この回答への補足

ご回答ありがとうございます。
そうするとですね、以下のような画面の遷移があるとするとおかしくなる場合があるんです。
Aメニュー→Bメニュー→Cメニュー→フォーム1
Aメニュー→Bメニュー→Cメニュー→フォーム2
Aメニュー→Bメニュー→Cメニュー→フォーム3

・Cから、フォーム1に行き、Cに戻り、フォーム2に行き、Cに戻る。
すると、CからBに戻れない。戻るボタンを押すと、フォーム2に行ってしまう。
こういうバグを治したロジックってどうすればいいのかな・・・と思ったのです。

補足日時:2014/12/14 09:07
    • good
    • 0

必ず元フォームに戻るなら、モーダルで開くとか。


WindowModeがacDialogだったかな?
    • good
    • 0

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