#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'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします
 

Copyright © T'sWare All rights reserved