Access 2010フォームのインスタンスがまだ開いているかどうかを確認するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/8354927

質問

まえがき

呼び出し元(フォームのインスタンスを作成したフォームでもある)に値を返す検索フォーム( Access 2010 )の複数のコピーを作成する必要があります。

前述のように、これらのフォームでは複数のコピーを同時に実行できます。たとえば、ユーザーは会社を何かに追加して、次のようにすることができます。

  • [会社を選択]をクリックして、会社の検索画面のインスタンスを開きます
  • 次に、会社にまだ追加されていない親会社があることに気付いたら、会社のエディターを開きます(元の会社の検索/選択画面は開いたままにします)。
  • 次に、[親会社を選択]ボタンをクリックして、検索の別のインスタンスを開き、画面を選択します
  • 彼らは親会社を見つけます
  • これを選択すると、2番目の検索画面が閉じ、親会社が最初の会社に追加されます。
  • 次に、ユーザーは元の検索画面を使用して変更された会社を選択します。これにより、元の検索画面が再び閉じられ、選択した会社が最初の検索を最初に初期化した形式に戻ります...

    これにより、ユーザーはエラーを見つけたときにデータを更新および修正できるため、忘れる可能性が低くなり、データがはるかに高速になります。

    これのほとんどは今は問題ありませんが、フォームのインスタンスを「acDialog」として開くことができず、検索が完了するまで呼び出し元のコードの実行を停止するという多くの問題がありました(詳細についてはこの質問)そして私が行った解決策は、エンドレスループを使用して検索画面かどうかを確認することにより、呼び出し元のコードの一時停止をシミュレートすることですインスタントはまだ表示されています。次に、ユーザーが検索画面で何かを選択すると、検索画面の非表示フィールドに値が入力され、自分自身が非表示になります(閉じられていません)。次に、呼び出し元の関数は、非表示になっていることを確認して、非表示のフィールドから値を取得し、インスタントをアンロードします。

    問題

    FormInstant.Visableを使用してフォームが非表示になっているかどうかを確認できますしかしユーザーがフォームを閉じるとエラーが発生し、フォームが存在するかどうかを確認するために通常使用するコードにはフォーム名が必要ですそしてそれはフォームの瞬間なので、すべてのフォームは同じ名前を持っています!ローカルの「フォーム」オブジェクトに格納されているため、フォームへの参照があります...通常使用するコードは次のとおりです。 ジェネラコディセタグプレ

    では、フォームがまだ読み込まれている瞬間を確認するにはどうすればよいですか?

役に立ちましたか?

解決

LOLメッセージを読み直しているときに、フォームが開いているかどうかに関係なく、エラーをトラップして解決できる可能性があることに気づきました。

私はすぐにこれを書きましたが、うまく機能しているようです: ジェネラコディセタグプレ

質問に回答し、次の男/ギャルがそれを使用できる限り、誰が質問に回答するかは実際には重要ではないと思います! :)

これを少し開いたままにしておきます。より良い答えが見つからない場合は、これをマークします...

他のヒント

私はあなたの答えが好きです。ループ/待機のアイデアについては?より良い方法は、常に各フォームに参照を含めることです。私は通常、frmPreviousというフォームモジュール変数を宣言します。 ジェネラコディセタグプレ

これで、フォームが閉じられたときに、「表示」+ループコード設定の代わりに、フォームがコードを「呼び出す」ことができます。

つまり、フォームのクローズコードでは次のようになります。 ジェネラコディセタグプレ

上記は多くの問題を解決しますが、1つはダイアログが不要なことです(ご存知のとおり使用できません)。また、呼び出し元のコードから「ループ+待機」コードを記述する必要性をダンプします。

ただし、これは、コードが呼び出し元のフォームの新しい関数で続行されることを意味します。したがって、私は通常、その関数を呼び出しフォームの呼び出しコードのすぐ下に配置します。また、その関数には標準名を使用する傾向があります。ループ/待機して同じコードルーチンで続行するのとは対照的に、このトレードオフは価値があると思います(コードでこの「続行」が望ましい場合が多いことに同意しますが、ループと待機コードを記述しなければならないことはそれほどクリーンではありません) 。

古い質問ですが、これが私に教えてくれた経験です:FormDefnのOne、Two、...インスタンスが開かれると、ユーザーはOne(設計できる唯一のマスター)を閉じると、Forms(FormName)はエラーを出します。Forms(Form)は間違ったオブジェクトを与えます、 ただし、Forms(NumberIndex)は.Name= FormName!で引き続き存在します。

OpenFormはForms(FormName)オブジェクトを作成します。閉じられると、Forms(FormName)はエラーを出します。「SetxForm= New Form_xxx」は、フォームコレクションにフォームを作成します。このフォームには、コレクション番号インデックスでのみアクセスでき、デザインすることはできません。

したがって、後でマルチインスタンスフォームを見つけるには、次のようなものを使用します。 ジェネラコディセタグプレ

これも試してください ジェネラコディセタグプレ

プロジェクトで上記の関数を次のように呼び出すことができます ジェネラコディセタグプレ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top