Windowsフォームアプリケーションのテキストボックスの文字の入力位置(キャレット)を取得、設定する方法を紹介します。
本記事では、Visual Studioで作成したC#のWindowsフォームアプリケーションのプロジェクトに記述するコードを記載します。
Windowsフォームアプリケーションのプロジェクトを作成する方法については、以下の記事を参照してください。
文字の入力位置(キャレット)の取得
テキストボックスの文字の入力位置(キャレット)を取得するには、System.Windows.Forms名前空間のTextBoxクラスのSelectionStartプロパティを使用します。
SelectionStartプロパティは、文字の入力位置を0からのインデックスで返します。
1 2 |
// テキストボックスの文字の入力位置(キャレット)を取得する var selectionStart = textBox1.SelectionStart; |
文字の入力位置(キャレット)の設定
SelectionStartプロパティでは、テキストボックスの文字の入力位置(キャレット)を設定することもできます。
1 2 |
// 文字の入力位置(キャレット)を先頭に設定する textBox1.SelectionStart = 0; |
1 2 |
// 文字の入力位置(キャレット)を末尾に設定する textBox1.SelectionStart = textBox1.Text.Length; |
サンプルプログラム
テキストボックスの文字の入力位置(キャレット)を取得、設定するサンプルプログラムを作成します。
ユーザーインターフェース
作成するフォームには、文字列を入力するテキストボックス(textBox1)、文字の入力位置(キャレット)を取得するボタン(button1)、文字の入力位置(キャレット)を表示または入力するテキストボックス(numericUpDown1)、文字の入力位置(キャレット)を設定するボタン(button2)を配置します。
文字列を入力するテキストを編集するテキストボックス(textBox1)は、複数行入力できるようにしておきます。
複数行入力可能なテキストボックスの設定については、以下の記事を参考にしてください。
ソースコード
ボタンをクリックした時の処理を実装します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { // コンストラクタ public Form1() { InitializeComponent(); // 垂直スクロールバーを表示する this.textBox1.ScrollBars = ScrollBars.Vertical; // 文字の入力位置を右揃えに設定する this.numericUpDown1.TextAlign = HorizontalAlignment.Right; this.button1.Text = "取得"; this.button2.Text = "設定"; } // 取得ボタンをクリックした時のイベントメソッド private void button1_Click(object sender, EventArgs e) { try { // 文字の入力位置(キャレット)を取得する int index = this.textBox1.SelectionStart; this.numericUpDown1.Value = index; this.textBox1.Focus(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } // 設定ボタンをクリックした時のイベントメソッド private void button2_Click(object sender, EventArgs e) { try { // 文字の入力位置(キャレット)を設定する int index = (int)this.numericUpDown1.Value; this.textBox1.SelectionStart = index; this.textBox1.Focus(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } } |
プログラムの実行
作成したプロジェクトをビルドして実行(デバッグ)します。
文字列を入力するテキストボックス(textBox1)にテキストを入力します。
取得ボタン(button1)をクリックすると、文字の入力位置(キャレット)が表示されます。
今度は文字の入力位置(キャレット)を入力します。
設定ボタン(button2)をクリックすると、指定した位置にキャレットが移動します。
SelectionStartプロパティには、テキストボックスに入力されている文字数を超える位置を指定してもエラーにはなりません。テキストの末尾が選択されます。
ただし、0未満の値を指定すると例外が発生します。
1 |
this.textBox1.SelectionStart = -1; |
例外メッセージ「’-1′ の InvalidArgument=Value は ‘SelectionStart’ に対して有効ではありません。」
本記事でご紹介した文字の入力位置(キャレット)の取得と設定は、System.Windows.Forms名前空間のRichTextBoxクラスにも適用できます。
TextBoxクラス(RichTextBoxクラス)には、SelectionStartプロパティの他に、テキストボックスの選択されているテキストの文字数を取得、設定するSelectionLengthプロパティ、テキストボックスの選択されているテキスト(文字列)を取得、設定するSelectedTextプロパティが用意されています。
SelectionLengthプロパティとSelectedTextプロパティについては、以下の記事を参考にしてください。