私は非常に迷惑な問題に巻き込まれました。MSAccess(2007) - ポップアップとモーダルフォーム - VBA経由のインスタンス化
クラスモジュール内でフォームを開き、そのフォーム自体をフォームに渡して、フォームがすべてのクラスプロパティとメソッドを使用できるようにする必要があります。 私はフォームについて話していますが、ユーザーに関するものではありません。 (問題はこの2番目のケースでは存在しないだろう)。 フォームはポップアップとモーダルの両方でなければなりません。
それでは、フォームを開き、呼び出し元クラスのメソッドで、このコードを仮定してみましょう:
sub OpenFormMethodOfTheCallingClass
set MyForm = new [Form_FormToBeOpened]
with MyForm
set .MyFatherClass = Me
.SetFocus ' ... this opens the form
MsgBox "Ok, user has closed the form ..."
end with
end sub
この方法では、コードの流れは、フォーム内「STOP」しません。 開いたフォームの「手前」に、「OK、ユーザーがフォームを閉じました...」というメッセージがすぐに表示されることを意味します。 そして、明らかに、このメソッドは終了し、フォームは閉じるメソッドのインスタンスであるため、(やはり明らかに)消えます。
デザインビューでは、ポップアップとモーダルの両方のフォームがTRUEに設定されています。 「POPUPことができます - MODALは、コード流動挙動 には影響しません - :
with MyForm
.Modal = True
.PopUp = True
(...)
...のように、全く役に立ちません:
呼び出し元の手順で、このように2つのプロパティを設定します設定する(!):実行時エラーを返します。
私は私の目標は、このよう開いている達成するために見つけた唯一の方法:
DoCmd.OpenForm "FormToBeOpened", WindowMode:=acDialog
この方法で、フォームにコードフロー「stucks」を、そしてユーザーがフォーム自体の流れを閉じたときにのみ呼び出し元のプロシージャとその次の命令に戻ります。 しかし、問題は、フォームに呼び出し側のクラスを渡すことができないことです。 OK、誰かが私のフォームがMODALであるため、フォームの複数の同時インスタンスをユーザーが開くことができないため、呼び出しクラスのプロパティをフォームにいくつかの方法で渡すことができます( " public-variables "、またはOpenArgsのJSONなど)。しかし、それは...本当に恐ろしいです。
私は恐怖です、なぜか、これは非常にばかげた質問であり、簡単な答えで分かりません。 :)
見てみましょう。
Thks、設計によってだ
FL
申し訳ありません、はい、私はダイアログを意味しました。修正されました。 – Gustav
ありがとうございましたGustav:私はあなたに「哲学的」な発言(私は構造化されたコーディングのための正しい環境ではないAccessについて言います)について完全に同意します。 しかし、私の問題は、呼び出し側のフォームからデータとプロパティを引き出す必要はなく、呼び出し側のクラスからでした。 もう一度私の質問を読んでください(それはしないでください:D:哲学的な提案が勝ちます)、コールされたフォームを呼び出しクラスを正しい "クリーン"私はDoCmdで開くことしかできません。それは、呼び出し側のクラスからの私とのやり取りを妨げてしまいます。 – Fil
それでは、残っている唯一のオプションは、ModalとPopUpがTrueに設定されているフォームを保存することです。 – Gustav