.NET TIPS

テキストボックスのキャレットを文字列の末尾に移動させるには?

デジタルアドバンテージ 一色 政彦
2005/02/25

 Windowsフォームで使用するテキストボックスは、次の画面例のように、新たにフォーカスを受け取ると、テキストボックス内に入力された文字列全体を選択状態にする仕様になっている。

フォーカス時に文字列が全選択されてしまう例

 この仕様では、ユーザーの入力により既存の文字列が消えてしまう。本稿では、テキストボックスに入力フォーカスが移動した際に文字列を全選択せず、次の画面のように、その文字列の末尾にキャレットを移動する方法について解説する。

フォーカス時に文字列の末尾にキャレットが移動する例

 まず、キャレットの位置の移動はテキストボックス(TextBoxコントロール)のSelectメソッドにより可能だ。このメソッド呼び出しを、テキストボックスがフォーカスを受け取ったときに発行されるEnterイベントのイベント・ハンドラ内に記述すればよい。このイベント・ハンドラは具体的には次のようになる。

private void textBox2_Enter(object sender, System.EventArgs e)
{
  this.textBox2.Select(this.textBox2.Text.Length, 0);
}
フォーカスを受けたときにテキストボックス文字列の末尾にキャレットを移動するコード(C#)
 
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
フォーカスを受けたときにテキストボックス文字列の末尾にキャレットを移動するコード(VB.NET)

 テキストボックスの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メソッドの場合と同じように、キャレットがテキストボックスの文字列の末尾に移動する。End of Article

カテゴリ:Windowsフォーム 処理対象:テキストボックス
使用ライブラリ:TextBoxコントロール
 
この記事と関連性の高い別の.NET TIPS
文字列に特定の文字列が含まれているかを調べるには?(Contains編)
文字列中の1文字を取得するには?
文字と文字列を変換するには?
文字列の長さを取得するには?
文字列を1文字ずつ解析するには?(サロゲート文字対応)
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH