テーブルやフォームのフィールド(コントロール)にフォーカスが移った際、
デフォルトではデータ全体が選択されています。その時データの最後にインナー
カーソル(キャレット)を表示する方法を説明します。
●操作手順●
(1) データベース全体の設定を行う
Access2000ではフォーカスにカーソルが移動した際の動作を、データベー
ス全体にわたって設定することが出来ます。
メニューバーの[ツール]−[オプション]を開き[キーボード]タブを開きま
す。その中の[フィールド移動時の動作]というオプショングループの値を
[フィールドの最後に移動]にすれば、フィールドの移動時に自動的にデー
タの最後の部分にカーソルが入ります。
(2) コードをコントロールのEnter/フォーカス取得時イベントに記述する
この方法のメリットは特定のコントロールを選択して処理できる点です。
逆にテーブルやクエリのデータシートビューではコードを記述できないた
め、この方法でカーソルをデータの最後に移動することは出来ません。
● サンプル ●
'(2)-1 SendKeysステートメントの使用
Private Sub テキスト1_Enter()
SendKeys "{F2}"
End Sub
'(2)-2 SelStart、SelLengthプロパティの使用
Private Sub テキスト1_Enter()
Me.テキスト1.SelStart = Me.テキスト1.SelLength
'Me.テキスト1.SelStart = 255 でも良い
End Sub
● 動作確認 ●
新規フォームを作成し、テキストボックスを2つ作成します(それぞれ[テキ
スト1] [テキスト2])。そして、テキスト2のEnter/フォーカス取得時イベント
に上記のコードを記述します。
フォームビューに変更し、テキストボックスに適当な値を入力して何度かフォー
カスを移動させて見ます。テキスト1では特に処理を行っていないので入力され
たテキスト全体が選択されますが、テキスト2では入力した値の最後の部分にカー
ソルが移動していることを確認して下さい。
● 詳細 ●
サンプルコード(2)-1ではSendKeysステートメントを使用しています。これは
フォーカスを取得したコントロール上で[F2]キーを押下すると、カーソルがデー
タの最後の部分に来ることを利用しています。
非常に簡単な方法ですが、Access97の場合SecdKeysステートメントによって
NumLockが解除されてしまうバグがありますので、この方法は使わないほうが良
いでしょう。
(2)-2の方ではSelStart、SelLengthというプロパティを使用しています。
SelStartプロパティはテキストボックス(コンボボックス)に入力されている
値の、どの部分にカーソルがあるかということを示します。
SelLengthプロパティは、テキストボックス(コンボボックス)に入力されてい
る値の内、選択されている文字数を示します。
ですから、サンプルではテキストボックス内の文字数をSelLengthプロパティ
によって取得し、そのままSelStartプロパティに代入しています。
パッと考えると最後から2番目の文字の部分にカーソルが来そうなものですが、
SelStartプロパティは0から始まる(テキストエリアの先頭が0)なので、そのま
ま代入できるのです。つまり、SelStartプロパティに0を代入することによって、
常にテキストエリアの先頭にカーソルを持ってくることも出来ます。
また、SelStartプロパティにテキストエリアに入力されている文字数よりも
大きな数を設定した場合、自動的に最後尾にカーソルが入ります。これを利用
して、テキストボックスやコンボボックスの入力最大数である255をSelLength
プロパティに代入しても同じ挙動を示します。
|