[[20140812154131]] 『TextBoxで改行文字を使うとカーソルとプロパティS』(プチグラマー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『TextBoxで改行文字を使うとカーソルとプロパティSelStartの位置がズレる』(プチグラマー)

 お世話になります。

 TextBoxで1行置きに表示しようとしてテキストに改行文字を挿入したところ、
マウスのカーソルが指す文字とプロパティSelStartが指す文字にズレが生じました。

一致させる、あるいは補正する方法はないでしょうか?
どなたか、ご教示のほど、宜しくお願いします。

テストプログラムは以下のようなものです。

Private Sub UserForm_Initialize()

    TextBox1.MultiLine = True
    TextBox1.Wordwrap = False
    TextBox1.Text = "ABCDE" & vbCrLf & "FGHIJ" & vbCrLf & "KLMNO"

'SelStart: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
' Char: A B C D E Cr Lf F G H I J Cr Lf K L M N O
'
'TextBox1の表示
' ABCDE
' FGHIJ↑ マウスでカーソルをJの右側に置くと、SelStart=11で「I」を指す。
' KLMNO↑ マウスでカーソルをOの右側に置くと、SelStart=17で「M」を指す。

End Sub

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _

                             ByVal X As Single, ByVal Y As Single)

    TextBox2.Text = TextBox1.SelStart
    TextBox3.Text = Asc(Mid(TextBox1.Text, TextBox1.SelStart, 1))

End Sub

< 使用 Excel:Excel2013、使用 OS:unknown >


 VbCrLf
 は
 Cr
 と
 Lf
 の2文字になりますが、こういうこととは違うのでしょうか?

(カリーニン) 2014/08/12(火) 16:30


vbCrLfが2文字になることはその通りです。
問題はカーソルの位置とSelstartが指す位置がズレることです。

テストプログラムをコピーして試してみるとご理解いただけるかと思います

(プチグラマー) 2014/08/12(火) 19:06


 試してみました。
 だから、Midで切り出すときに、vbCrLfをvbCrに置換すればよいという意味では?

(マナ) 2014/08/12(火) 19:56


 表示がずれていたのでCrLfが記述されていることに気づきませんでした。

 ↓のようにするとずれません。

 'SelStart:	1	2	3	4	5	6	7	8	9	10	11	12	13	14	15	16	17	18	19	
 'Char:		A	B	C	D	E	Cr	Lf	F	G	H	I	J	Cr	Lf	K	L	M	N	O

(カリーニン) 2014/08/12(火) 19:58


解決しました。

TextBoxオブジェクトがvbCrLfを1文字と見なしているらしいことに起因しているようです。
それを補正するルーチンを書いて対処しました。

なお、改行のためにvbCrLfの代わりにvbCrあるいはvbLfを用いてもOKです。
その場合、TextBoxオブジェクトはそれらを自動的にvbCrLfに書き換えています。

コメント下さった皆さん、ありがとうございました。

(プチグラマー) 2014/08/13(水) 11:04


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.