TextBox(RichTextBox)に文字列を挿入する


■紛らわしいメソッドやプロパティが存在するので、筆者なりに検証してみる。 WEBには色々な方法が公開されており、見るに耐えないモノからスマートにやっつけているモノまで様々ですが、 今回は、カーソルのある位置に文字列を挿入することと仮定して検証を進めてみます。

 例1)
 With TextBox
  ' .Text.Insert(.SelectionStart, "Insert")だけでは変化無し
  .Text = .Text.Insert(.SelectionStart, "Insert")
  ' フォーカスを戻す時は必要
  .Focus()
 End With
まず、上記の記述ですが、特に挙動不審な動きは無い、 カーソル位置がリセットさてしまう以外は・・・この挙動、結構な曲者ですね、エディタ等には使えないのかと? 上記のInsertはファンクションであり、戻った値を使わないと意味をなさないのでご注意を、続いて・・・
 例2)
 With TextBox
  ' .SelectedText.Length > 0 は置換
  ' .SelectedText.Length = 0 は挿入となる
  .SelectedText = "Insert"
  ' フォーカスを戻す時は必要
  .Focus()
 End With
上記の記述でも、カーソルの位置以外は同じ結果となるはずです。 上記のコードのSelectedTextはプロパティであり、直接の読み書きが可能になっています。 二つのコードの違いは、ファンクションで得た値を使うか、プロパティにアクセスして変更するかですね。 もちろん用途によると思いますが、どちらかと言うと、例2)の記述の方がスマートな気がするのは筆者だけでしょうか・・・

例1)のコードで、カーソル位置が変わってしまうのなら、SelectionStartプロパティの値を元の値に戻してしまえと考えがちですが、 スクロールを伴う場合などは、不自然な挙動を示します。また、例2)のコード内のコメントにも記述していますが、 SelectedTextの場合、その値の長さによっては、置換もしくは挿入と勝手に振舞うので、 それを上手くコントロール出来ないと予期せぬ結果となります。

TOP ▲