[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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
テストプログラムをコピーして試してみるとご理解いただけるかと思います
(プチグラマー) 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.