テキストボックス マルチライン設定から表示されてる行の抜出し

タグの編集
投稿者 初心者  (社会人) 投稿日時 2017/6/26 18:24:23
恐れ入りますがド素人にアドバイスをお願いします。

TextBox1にMultiline、WordWrapをTrueで設定し、複数行入力できる形式にしてあります。
行単位で抜出しする場合は、TextBox1.lines()を使用しております。

今回お聞きしたい事は、TextBox1に入力をし続けて右端で自動で折り返した場合、
折り返した部分までを抽出したいです。

例)                      ↓ここまでがTextBox1の右端とします                 
|あああああああああああああああ|
|あああああああああああああああ|
|ああ                         |

Enterキーを使わずに「あ」を32個入力し、TextBox1.lines(0)を使用すると「あ」が32個抽出されます。
実際は折り返した部分までが欲しい為、「あ」を15個抽出したいです。

分かり難い説明で申し訳ありませんが、ヒントとなる一言だけでも構いませんので、
お力を貸してください。



投稿者 ねこまっしぐら  (社会人) 投稿日時 2017/6/26 21:13:23
GetLineFromCharIndexをテキスト全部に対してすれば行の変化が分かります

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から始まるのであえて
求めなくてもよいです。
投稿者 初心者  (社会人) 投稿日時 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


無駄な記述や未入力時にエラー等になるかもしれませんが、
これにて解決とさせて頂きます。