C#

【C#】WindowsFormでのTextプロパティを変更すると SelectionStartが変わる【備忘】

こんばんは。まれーどです。

最近、当たり前のことなんだけど「あ、そうなるんだ」って思ったので、書いておきます。

ソース

Leaveイベントでテキストボックスの値をTrimして改めてテキストボックスに設定しています。テキストボックスのSelectionStartをラベルに表示するという、簡単な処理です。

private void textBox2_Leave(object sender, EventArgs e)
{
      textBox2.Text = textBox2.Text.Trim();
      label1.Text = textBox2.SelectionStart.ToString();
}

初学者の方向けに一応説明。

Trimは最後の空白を削除する処理です。
SelectionStartはキャレットの位置が何文字目かカウントしてます。

動き

こちらの画像を見てください。

右のテキストボックスのSelectionStartを表示してます。何も入ってないので0が表示されてます。

LeaveイベントでSelectionStartを見るように実装しています。3文字入力して左にフォーカスを戻すと3が表示されました。
スペースを何個か入れてみました。この状態で左にフォーカスを持っていきます。

SelectionStartは0になりました。

当たり前っちゃ当たり前だけど。文字数変わるから、今の位置分からなくなるから。そりゃそうなんだけど、盲点でした。

補足

今回はLeaveでTrimをしてみましたが、別にそれに限ったことではなく、TextBoxのTextプロパティをコードで変更するとSelectionStartは0に再設定されます。

文字の変更がなければ特に何も起きません。

特にLeaveイベントで値変更するときはちょっと気を付けたほうがいいかもって話でした。