MSアクセスデータベース(2016)を開発中です。MS Access:他のコントロールでフォーカスが失われたときにサブフォームを非表示にする
1つのサブフォームを含む多数のコントロールを持つメインフォーム(MF)があります。このサブフォームはSFであり、MFの2つのコントロールに関連しています。 C1およびC2と名付けられたこれらのコントロール。
MFがロードされているとき、SFは表示されません。
C1又はC2がフォーカスを得たとき、SF視認性True
に設定されています。
今、私は必要なものは次のとおりです。
の1- False
にSF可視性を設定するにはC1または一度C2SFを除いて他のコントロールのフォーカスを失いました。
2-それはC1とC2を除いMF上の任意のコントロールのフォーカスを失ったらFalse
にSF可視性を設定します。
初めはシンプルに見えましたが、まっすぐに見えましたが、そうではありません。
私が使用:
Private Sub C1_GotFocus()
Me.SF.Visible = True
End Sub
Private Sub C2_GotFocus()
Me.SF.Visible = True
End Sub
Private Sub C1_LostFocus()
Me.SF.Visible = False
End Sub
Private Sub C2_LostFocus()
Me.SF.Visible = False
End Sub
Private Sub SF_LostFocus()
Me.SF.Visible = False
End Sub
を今すぐC1またはC2はそれが消え、私はC1とC2ために必要な情報を選択することはできませんSFための制御を失った場合。 SFが、それはif
いくつかのステートメントでこれを修正するのは簡単に思えた
を消えないC1とC2に対するフォーカスを失った場合
はまた、しかし、このケースではありません。
フォーカスを取得する新しいコントロールは、LostFocus()
イベントによって予測できないという問題があります。したがって、このようにするのは難しいです。
ネットを検索して解決策を見つけましたが、私は何も使用できませんでした。
回避策は、C1、C2とSFとゲインがSFを隠すために集中することをMF上の他のすべての単一のコントロールを設定するためLostFocus()
イベントを省略することであろう。
これは私の必要に応じて機能しますが、実際的な解決策ではないようです。
これを達成するためのより単純で合理的な方法はありますか?
メインフォームには、このようにコード化するコントロールが多すぎます。
ありがとうございました。
ありがとう@DanielG、** C1 **、** C2 **は編集可能で** SF **コンテンツをフィルタリングするために使用されます。必要な値が** SF **に表示されているときは、ダブルクリックすると選択できます。問題は、アクティブなコントロールが** C1 **、** C2 **または** SF **の場合は、** SF **サブフォームを**表示のみ**に保つ方法です。そうでなければ、それは隠されるべきです。この問題は、** C1 **または** C2 **からフォーカスが失われた場合に発生します。フォーカスコードを失うと** SF **が隠れるからです。フォーカスが** SF **自身に移行している場合は、** ** ** ** ** ** ** ** ** ** ** **を隠さないようにどのように指示できますか? – Shadi
C1とC2のAfterUpdateイベントはおそらくもっとうまくいくでしょうか?言い換えれば、この値が変更された場合に限り、何かが行われるべきである。また、あなたのコードでScreen.ActiveControlプロパティを組み込むことを検討し、C1、C2、またはSFのいずれかの場合は、hideプロパティを短絡しますか? – DanielG
もう1つのアイデアは、サブフォームを再クエリーする「Apply Filter」というボタンがあることです。 C1とC2が(フィールドにバインドされていない)バインドされていないフィルタコントロールである場合、ユーザーに1つ以上のパラメータを入力させ、次に適用ボタンを押します。そのボタンの背後にあるコードは、制御された方法でロジックを実行でき、2つのパラメータを同時に適用できます。 – DanielG