いつも参考にさせていただいております。
現在、Access365で作業しているのですが、
フォームのデザインビュー上で、重なったコントロールを「Tabキー」でカーソル移動した際に、
前面、背面が入れ替わってしまうことがあるのです。
以下、再現手順です。
1.フォームにテキストボックス1、テキストボックス2を追加します。
2.テキストボックス1の上にテキストボックス2を重ねます(このとき、テキストボックス2が最前面になっています)。
3.テキストボックス2を選択し、「Tabキー」で背面にあるテキストボックス1を選択します。
4.テキストボックス1をリボンの「配置」の「最前面へ移動」で最前面にします。
5.いったん保存して閉じます。
6.改めてデザインビューを開き、最前面のテキストボックス(4で最前面にしたテキストボックス1)を選択します。
7.「Tabキー」を押して背面のテキストボックス2にカーソルを移動します。
8.この時テキストボックス2が選択状態になるだけでなく、位置も最前面に変更されてしまいます。
選択状態だから、というわけでもなく、ほかにカーソルを移したり、
単票フォーム、帳票フォームにしても、テキストボックス1の前面にテキストボックス2がある状態です。
順番が変わるトリガーになるのは、おそらく「Tabキー」でのカーソル移動だと思います。
Access2010で同じことを試しても勝手に入れ替わることはありませんでした。
また、365でも以前(1年前?)はこんな現象はなかったと思います。
テキストボックスだけではなく、チェックボックスの上にコマンドボタンを重ねたケースでも順番が変わりました。
ネットを探しても同じ現象の情報が見つからず、
私の環境だけこんなことが起きているのでしょうか?
勝手に順番がかわってしまうため、気づきにくく困っております。
お知恵を貸していただけないでしょうか。
よろしくお願いいたします。
当方の365環境で同じ手順を試してみたら、同じ現象が再現しました。
マウスやプロパティシートからの選択では現象は発生しないので、やはりTABキーによる移動がトリガーのようです。
バグのような気がしますので、サポートに問い合わせてみてはどうでしょう。
早急な対策が必要なら、以前の365では正常動作していたのなら下記の方法で以前のバージョンに戻してとりあえずの対応とすることになるでしょう。
Office 365(2016)をロールバックする - Microsoft コミュニティ
ご返信ありがとうございます。
やはりバグでしょうか。フィードバックしてみたいと思います。
ちなみに、Accessにはコントロールの前面、背面の順番(Zorder?)は存在しないのでしょうか?
VBAで強制的に設定できればと考えたのですが、それらしきプロパティが見つかりませんでした。
後ほど、ロールバックも試してみたいと思います。
ないみたいですね。
VBAで強制的に前後を入れ替えるには、下記のコマンドを実行すれば可能ですが、デザインビューで実行する必要があり面倒ですね。
DoCmd.RunCommand acCmdSendToBack '最背面に移動
DoCmd.RunCommand acCmdBringToFront '最前面に移動
フォーム1のテキストボックス2を最背面に配置するコード例
デザインビューではMeは使えない。
コントロールを選択するには、InSelection = True とする。
コードまでご教授いただき、ありがとうございます。
また、2022年頃のバージョンにロールバックしたところ、上記のバグも発生しませんでした。
今回の件をマイクロソフトにフィードバックしましたが、
解決までは時間がかかる可能性が高いので、
ロールバックしたまま使うか、こちらのコードで適宜前後を指定したいと思います。
ご助力いただき、ありがとうございました。