tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
テキストボックスで現在のカーソル位置を取得及び文字列を挿入(VB.NET) ( No.17 )  [親スレッドへ]
日時: 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



 [スレッド一覧へ] [親スレッドへ]