• ベストアンサー

RichTextBoxの改行を認知してくれない

お世話になります。勉強のために リッチテキストボックスをひとつ作成し、プロパティ のTextにマウスをやると入力欄が出ましたので aaa bbb ccc ddd eee fff ggg と改行しながら入力したら、リッチテキストボックス に、意図したとおりに入力できているし 実行しても意図したとおりに文字が入っています。 一瞬これはいいぞ!と思いましたが ただ、プロパティのTextの欄には aaabbbcccdddeeefffgggと横長に 入っており、少し嫌な予感がしました。 まあスペースの関係でそうなってるのだろうと思いました。 次にバー(HScrollBar1)を作成し 0-6で可変。 ユーザーが行番号を指定する 目的です。 以下が、バーを操作した時に、行番号に対応した 配列要素が表示されるという目的のイベントです。 (TextBox1が表示先です) Private Sub HScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HScrollBar1.Scroll Dim strVal Dim aryStrings strVal = RichTextBox1.Text aryStrings = Split(strVal, "VbCr") TextBox1.Text = aryStrings(HScrollBar1.Value) End Sub 結果は、失敗でした。!! 試しに、RichTextBox1.Textのプロパティを手動で aaaVbCr bbbVbCr cccVbCr dddVbCr eeeVbCr fffVbCr gggVbCr と書き換えて実行すると、成功しました。 しかしこれでは、改行を自動的に認識していることになりません。 よく考えてみると、Split(strVal, "VbCr")のVbCrは ””で囲まれているので、単なる意味を持たない文字列のような気がします。 Split関数自体は成功ですが、 本来なら、Split(strVal, "VbCr")ではなく Split(strVal, VbCr)でもって 改行位置で区切ってほしいのですが "VbCr"で区切るのなら、"ほにゃ”で区切っても良いことに なります。 お手数ですがどなたか素人向けに教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom11
  • ベストアンサー率53% (134/251)
回答No.1

こんにちは、 リッチテキストボックスに以下のように設定して、 aaaaa bbb sss ddd vbCrではなく vbLfを利用して、 splitします。 Dim s() As String s = Split(RichTextBox1.Text, vbLf) sの配列に分割します。 配列の中身を出力すると For i = LBound(s) To UBound(s) Debug.Print(s(i)) Next 出力結果 aaaaa bbb sss ddd 配列sの中身を結合すると Debug.Print(Join(s, "")) 結果は、 aaaaabbbsssddd になります。 分割する定数の問題だと思います。 環境は、visual basic 2005

bolnf38
質問者

お礼

vbLfを利用してsplitすればよかったのですね。おかげでやっと 解決しました。というかLBound(s) To UBound(s)の件はまだ テストしてないのですが、配列の0から配列の要素数までみたいな 意味ですよね。あとで検索して調べてみたいと思います。 僕の環境ではDim i As Integer でFor i =0 to 5 Next で実験してイミジエトに出力が、うまくいきました。  正直言って、最初、フォームに出力されると思ってましたので 結構、気づくのに時間かかったんですが(^^) どちらにしても肝心なことは解決できましたので 本当にありがとうございました!  

その他の回答 (1)

noname#140971
noname#140971
回答No.2

Private Sub Command1_Click()   MsgBox CutStr(rtbTextBox.Text, vbCrLf, 2) End Sub これで 'bbb' が表示されました。 VB 6.0 Excel 2003 でのテストです。 Public Function CutStr(ByVal Text As String, ByVal Separator As String, ByVal N As Integer) As String   Dim strDatas() As String      strDatas = Split("" & Separator & Text, Separator, , 0)   CutStr = strDatas(N * Abs((N <= UBound(strDatas)))) End Function 質問者が試みているのは、 CurStr関数と同じことですね。 ところで、 ○ MsgBox CutStr(rtbTextBox.Text, vbCrLf, 2) × MsgBox CutStr(rtbTextBox.Text, "vbCrLf", 2) であることは判りますよね。 vbCrLf ---- 記号定数。 これを、文字列である "vbCrLf" とやった訳です。 [イミディエイト] ? CutStr("AAA vbCrLf BBB vbCrLf CCC", "vbCrLf", 1) AAA ? CutStr("AAA vbCrLf BBB vbCrLf CCC", "vbCrLf", 2) BBB もちろん、この場合、文字列に区切り文字として "vbCrLf" を書き加えれば CutStr は成功します。 ※単純に、記号定数にダブクォーテーションを付けるというチョンボをしているだけですね。

bolnf38
質問者

お礼

回答いただき本当にありがとうございました。 大変参考になりました。 また、 CurStr関数についても、解説いただきありがとうございました。 Split関数だけしか知らなかった(というか)これも知りたてのほやほや なんですが、。それ以外にも色々あるものなんですね。 >  vbCrLf ---- 記号定数。 >  これを、文字列である "vbCrLf" とやった訳です 仰せのとおりです。(^^);

関連するQ&A