#040 フォーカス取得時にテキストボックスの先頭にカーソルをおくには? フォーム、VBA

テキスト全体が選択状態のサンプル画面Accessのデフォルトのオプション設定では、[Tab]キーなどのキーボード操作時やタブ移動順が先頭である場合のフォームオープン時など、テキストボックスコントロールにフォーカスが移動したときにテキスト全体が選択状態になり反転表示されます(右図)。
もちろんAccessメニューの[ツール]-[オプション]で表示されるオプションダイアログの[キーボード]タブにある[フィールド移動時の動作]を「フィールドの先頭に移動」にすることによって、テキスト全体ではなく先頭にカーソルが移動するようになりますが、この方法では常にそのようになってしまいます。

Accessオプションダイアログ

そこで、オプション設定はあくまでも「フィールド全体を選択」としておき、必要なところでのみフォーカス取得時にテキストボックスの先頭にカーソルをおく方法をご紹介します。
それには、対象となるテキストボックスコントロールの [SelStart]プロパティ や [SelLength]プロパティ を使用します。[SelStart]プロパティはテキストの選択範囲の先頭のカーソル位置を取得・設定します。一方、[SelLength]プロパティはテキストボックス上で範囲選択されている文字数を取得・設定します。今回の場合は、テキストボックスにフォーカスが移動したらその設定を行うようにしますので、[Enter/フォーカス取得時]イベントまたは[GotFocus/フォーカス取得後]イベントに次のようなコードを記述します。先頭にカーソルを移動すればよいので、カーソル位置を"0"(カーソル位置は先頭をゼロとしてカウントします)、選択文字数を"0"に設定します。
Private Sub テキスト0_GotFocus()
'フォーカスを取得したら先頭にカーソルがくるようにする
  With Me!テキスト0
    .SelStart = 0
     .SelLength = 0

  End With

End Sub
ここでは、実際にはフォーカスが移動したらまず一時的にテキスト全体が選択状態となりますので、選択文字数をゼロにするだけで必然的にカーソルが先頭に移動します。また、"SelStart = 0" とすることによっても選択状態が解除されますので、これも必然的にカーソルが先頭に移動します。ということは、結果的には[SelStart]プロパティか[SelLength]プロパティのいずれか一方の値をゼロにするだけでも同様の結果が得られることになります。


参考までに、次のようなコードによってテキストボックスの内容全体を選択状態にすることができます。
  With Me!テキスト0
    .SetFocus
    .SelStart = 0
    .SelLength = LenB(.Value)
  End With
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved