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

» 2005年02月25日 05時00分 公開
[一色政彦デジタルアドバンテージ]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「.NET TIPS」のインデックス

連載目次

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

カテゴリ:Windowsフォーム 処理対象:テキストボックス
使用ライブラリ:TextBoxコントロール

「.NET TIPS」のインデックス

.NET TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。