- 日時: 2013/02/17 17:22
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[テキストボックス][][] * * キーワード:TextBox,キャレット,カーソル,現在行,現在桁,文字列をペースト,挿入 * *********************************************************************************** '---------------------------------------------------------------------------------- SampleNo:041 投 稿 日:2013/02/17 投 稿 者:VBレスキュー(花ちゃん) 動作確認:Windows Vista / Windows 7 / VB2010 Pro SP1Rel / Framework 4.0 SP1Rel で [Option Compare Text][Option Explicit On][Option Infer On][Option Strict On]で確認 '========1=========2=========3=========4=========5=========6=========7=========8===
これまでのサンプル(1〜16)をご覧になってから、ご利用下さい。
※ タイトルでは、一般的な呼び名のカーソルを使っておりますが、MSDN の表記に合わせて キャレット(カーソル、カレット (caret)) を使用します。
テキストボックスで、現在のキャレット位置を取得 通常、キャレット位置と言うと TextBox1.SelectionStart の位置が使用されるのですが、 SelectionStart は、選択開始位置を現しており、キャレット位置としては、適当でないので、 ここでは、選択されている場合は選択終了位置(実キャレット位置)を現在のキャレット位置と しております。 そう言った意味では、下記サンプルは、ツッコミモード満載のサンプルとなっております。 http://www.hanatyan.sakura.ne.jp/dotnet/txtbox02.htm
テキストボックスで、現在のキャレット位置に文字列を挿入 (置き換える場合は、 >>12 をご覧ください。) テキストボックスで、現在のキャレット位置にクリップボード内の文字列をペースト テキストボックスで、現在のキャレット位置の行を取得(現在行を取得) テキストボックスで、現在のキャレット位置の桁を取得(現在桁を取得)
使用コントロールの配置や実行結果の図は、下記リンクをご覧ください。 http://www.hanatyan.sakura.ne.jp/samplepic/textbox01.gif
'----------------------------------------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click
Dim cp As Integer = TextBox1.SelectionStart + TextBox1.SelectionLength Dim msg As String = "現在のキャレット位置は、" & cp.ToString & " 文字目にあります" msg &= vbCrLf & "(改行文字 (CrLf) は、2文字として換算されます。)" MessageBox.Show(msg)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click
'現在システムクリップボードにあるデータを取得します Dim iData As IDataObject = Clipboard.GetDataObject()
'クリップボードにテキストデータがあれば If iData.GetDataPresent(DataFormats.Text) Then
'選択されている文字と置き換える場合は、下記2行は不要となります。 Dim cp As Integer = TextBox1.SelectionStart + TextBox1.SelectionLength TextBox1.Select(cp, 0)
'現在のキャレット位置に挿入する(下記行だけ実行すれば置換になります。) TextBox1.SelectedText = "[" & CType(iData.GetData(DataFormats.Text), String) & "]"
End If
End Sub
'参考コード Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
'現在のキャレット位置を求める Dim cp As Integer = TextBox1.SelectionStart + TextBox1.SelectionLength
'.GetLineFromCharIndex メソッド 'テキスト内の指定した文字位置から行番号を取得します。 0 から始まるので、+ 1 Dim cpy As Integer = TextBox1.GetLineFromCharIndex(cp) + 1
'GetFirstCharIndexFromLine メソッド '指定した行の最初の文字のインデックスを取得します。 Dim cpx As Integer = TextBox1.GetFirstCharIndexFromLine(cpy - 1)
Label1.Text = " 現在行 = " & cpy.ToString & " 現在桁 = " & (cp - cpx).ToString
End Sub
'テスト用の環境を設定(適当にご準備下さい。) Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Multiline = True TextBox1.ScrollBars = ScrollBars.Both TextBox1.Text = "あいうえお" & ControlChars.CrLf & _ "kakikukeko" & vbCrLf & _ "さしすせそ" 'この場合、改行文字(CrLf)は、2文字としてカウントされる TextBox1.Select(8, 1) TextBox1.HideSelection = False Timer1.Interval = 100 Timer1.Enabled = True
End Sub
|