この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Windowsフォームで使用するテキストボックスは、次の画面例のように、新たにフォーカスを受け取ると、テキストボックス内に入力された文字列全体を選択状態にする仕様になっている。
この仕様では、ユーザーの入力により既存の文字列が消えてしまう。本稿では、テキストボックスに入力フォーカスが移動した際に文字列を全選択せず、次の画面のように、その文字列の末尾にキャレットを移動する方法について解説する。
まず、キャレットの位置の移動はテキストボックス(TextBoxコントロール)のSelectメソッドにより可能だ。このメソッド呼び出しを、テキストボックスがフォーカスを受け取ったときに発行されるEnterイベントのイベント・ハンドラ内に記述すればよい。このイベント・ハンドラは具体的には次のようになる。
private void textBox2_Enter(object sender, System.EventArgs e)
{
this.textBox2.Select(this.textBox2.Text.Length, 0);
}
Private Sub TextBox2_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.Enter
Me.TextBox2.Select(Me.TextBox2.Text.Length, 0)
End Sub
テキストボックスのSelectメソッドはテキストを範囲選択するためのメソッドであるが、本稿ではこれをキャレットの移動に使っている。Selectメソッドでは、その第1パラメータに選択開始位置を指定し、第2パラメータに選択文字数を示す。なお、開始位置のインデックス値は、文字列の先頭が「0」で、その最後尾が文字列の長さの値(例えば3文字なら「3」)となる。
上記コードでは、このSelectメソッドの第1パラメータに「文字列の長さ」の値(テキストボックスのLengthプロパティ)を、第2パラメータに「0」を指定している。つまり、文字列の最後尾から0文字分だけ、文字列を範囲選択しているわけである。これにより、(実質的には選択する文字列はなく)キャレットが末尾に移動する。
なお、テキストボックスのSelectionStartプロパティを使うことでも、文字列の選択開始位置を指定できるので、上記コードのSelectメソッド呼び出しを次のように書き換えることもできる。
【C#の場合】≪≫
this.textBox2.SelectionStart = this.textBox2.Text.Length
【VB.NETの場合】
Me.TextBox2.SelectionStart = Me.TextBox2.Text.Length
このコードでもSelectメソッドの場合と同じように、キャレットがテキストボックスの文字列の末尾に移動する。
カテゴリ:Windowsフォーム 処理対象:テキストボックス
使用ライブラリ:TextBoxコントロール
Copyright© Digital Advantage Corp. All Rights Reserved.