テキストボックス マルチライン設定から表示されてる行の抜出し
投稿者 ねこまっしぐら  (社会人)
投稿日時
2017/6/26 21:13:23
GetLineFromCharIndexをテキスト全部に対してすれば行の変化が分かります
http://www.gazo.cc/up/247286.jpg
http://www.gazo.cc/up/247286.jpg
投稿者 shu  (社会人)
投稿日時
2017/6/27 07:18:16
TextBox1.GetFirstCharIndexFromLine(<0を起点とする行番号>)
で指定した行の始まる位置が取得出来るので
idx1 = TextBox1.GetFirstCharIndexFromLine(0)
と
idx2 = TextBox1.GetFirstCharIndexFromLine(1)
を求め
idx2が-1ならidx1以降最後まで、そうでなければidx2の手前まで
文字列を取得すればよいです。0行目は0から始まるのであえて
求めなくてもよいです。
で指定した行の始まる位置が取得出来るので
idx1 = TextBox1.GetFirstCharIndexFromLine(0)
と
idx2 = TextBox1.GetFirstCharIndexFromLine(1)
を求め
idx2が-1ならidx1以降最後まで、そうでなければidx2の手前まで
文字列を取得すればよいです。0行目は0から始まるのであえて
求めなくてもよいです。
投稿者 初心者  (社会人)
投稿日時
2017/6/27 14:45:08
ねこまっしぐらさん、shuさん
ご記入ありがとうございました。
お二人のアドバイスから以下のプログラムを作成し、
無事折り返した部分までを抽出することができました。
Dim COUNT As Integer = TextBox1.GetLineFromCharIndex(TextBox1.TextLength) + 1
Dim A(0 To 50) As String
Dim B(0 To 50) As Integer
For i = 0 To COUNT
B(i) = TextBox1.GetFirstCharIndexFromLine(i)
Next
For x = 0 To COUNT - 1
If B(x + 1) = -1 Then
A(x) = Mid(TextBox1.Text, B(x) + 1)
Else
A(x) = Mid(TextBox1.Text, B(x) + 1, B(x + 1) - B(x))
End If
Next
無駄な記述や未入力時にエラー等になるかもしれませんが、
これにて解決とさせて頂きます。
ご記入ありがとうございました。
お二人のアドバイスから以下のプログラムを作成し、
無事折り返した部分までを抽出することができました。
Dim COUNT As Integer = TextBox1.GetLineFromCharIndex(TextBox1.TextLength) + 1
Dim A(0 To 50) As String
Dim B(0 To 50) As Integer
For i = 0 To COUNT
B(i) = TextBox1.GetFirstCharIndexFromLine(i)
Next
For x = 0 To COUNT - 1
If B(x + 1) = -1 Then
A(x) = Mid(TextBox1.Text, B(x) + 1)
Else
A(x) = Mid(TextBox1.Text, B(x) + 1, B(x + 1) - B(x))
End If
Next
無駄な記述や未入力時にエラー等になるかもしれませんが、
これにて解決とさせて頂きます。
TextBox1にMultiline、WordWrapをTrueで設定し、複数行入力できる形式にしてあります。
行単位で抜出しする場合は、TextBox1.lines()を使用しております。
今回お聞きしたい事は、TextBox1に入力をし続けて右端で自動で折り返した場合、
折り返した部分までを抽出したいです。
例) ↓ここまでがTextBox1の右端とします
|あああああああああああああああ|
|あああああああああああああああ|
|ああ |
Enterキーを使わずに「あ」を32個入力し、TextBox1.lines(0)を使用すると「あ」が32個抽出されます。
実際は折り返した部分までが欲しい為、「あ」を15個抽出したいです。
分かり難い説明で申し訳ありませんが、ヒントとなる一言だけでも構いませんので、
お力を貸してください。