• ベストアンサー

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

  • VB2010のRichTextBoxで改行が消える

    VB2010のWindowsフォームアプリに於いて RichTextBoxに改行が入ったテキストを入力したり、 RichTextBox.Textプロパティにテキストファイルから読み込んだ改行入りのテキストをセットしてそれを ファイルに吐き出したり、別のTextBox.Textにセットしてやると 改行が消えて一行のテキストになってしまいます。 RichTextBoxに何か設定が必要なんでしょうか?

  • RichTextBoxに代入されたTextBoxの数を表示

    VB2008を使用しています。現在、10個のTextBoxとそれに対応するCheckBoxを作成し、チェックの入ったTextBox内の文字をRichTextBoxに代入するプログラムを作成しています。そこでRichTextBoxに代入されたTextBoxの数を別のTextBoxに表示させたいのですが何か良い方法はありますでしょうか?現在、下記のようにコードを組んであります。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text ・ ・ ・ If Me.CheckBox10.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox10.Text End If

  • TextBox内で改行できるようにしたい

    エクセル2003です。 UserForm1にTextBox1を配置しました。 TextBoxに文字を入力し右端にきたら自動で次の行へ改行し、文字を入力し続けたいのですがなぜかできません。 エンターキーを押しての改行もできません。 アクセスならなぜか自動でできました。 スクロールバーがないせいかな?と思い、 TextBox1のScrollBarsプロパティを 「mScrollBarsVertical」にしてもスクロールバーが表示されません。 何か解決方法はありますか? ご教授よろしくお願い致します。

  • HScrollBar(.net)

    HScrollBarとTextBoxがありHScrollBarはプロパティで0~100までの数値が入るようにしているのですが・・・なぜか91までしか入りません なぜなんでしょうか? TextBox1.Text = HScrollBar1.Value

  • XmlTextWriterで改行、RichTextBoxで任意の文字列に属性を持たせるには

    XmlTextWriter writer = new XmlTextWriter("test.xml", null); writer.Formatting = Formatting.Indented; writer.WriteStartDocument(); writer.WriteStartElement("タイトル"); writer.WriteStartElement("内容"); writer.WriteStartElement("string"); writer.WriteAttributeString("size", RichTextBox.Text); writer.WriteString(RichTextBox.Text); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndDocument(); writer.Flush(); writer.Close(); 開発環境はC#です。 上記のようなコードでRichTextBoxから入力された文章をxmlに出力するのですが、 RichTextBox内で改行しても、xml文では1行文のままで出力されてしまいます。 これを、RichTextBox内で改行されたら、xml文でも改行されているようにするにはどうすれば良いのでしょうか? それと、RichTextBox内で文字列の大きさを変えるために、"size"というアトリビュートを持たせているのですが、 これを任意の選択した文字列だけにアトリビュートを持たせるにはどうすれば良いのでしょうか? 例:<string>こんにちははじめまして</string> <string>こんにちは</string> <string size="10">はじめまして</string> 上記の文を下記の様にしたいです。

  • CheckBoxがTrueの場合に表示をさせるには?

    VB2008を使用しています。 3つのCheckBox1~3とそれに対応した3つのTextBox1~3を準備し、 Buttonを押すとCheckBoxがTrueのものだけをRichTextBox1に表示 させたくて下記のプログラムを作成しました。 しかしCheckBox1とCheckBox3については上手く作動するのですが CheckBox2について不具合が発生します。 (不具合) CheckBox1=TrueでButtonを押すとRichTextBox1にTextBox1を表示。 その後、CheckBox3=TrueでButtonを押すとRichTextBox1にTextBox1. TextBox3と表示。 ここまでは良いのですが、 CheckBox2=TrueでButtonを押すとRichTextBox1にTextBox2を表示。 その後、CheckBox3=TrueでButtonを押すとRichTextBox1にTextBox2. TextBox2.TextBox3と表示されてしまいTextBox2の内容が重複して しまいまいます。 何か良い解決策がありましたら教えて下さい。 よろしくお願いいたします。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click     If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text End If     If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "."     End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text     End If If Me.CheckBox3.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "." End If RichTextBox1.Text = RichTextBox1.Text & TextBox3.Text End If End Sub

  • ソフト改行文字が入らず困っています

     VB6環境で、テキストボックスにEM_FMTLINES(= &HC8)をSendMessageしソフト改行文字を入れた形でテキストを取得したいのですが、希に複数行入力されているにもかかわらず、ソフト改行文字が追加されない場合があります。  MultiLineをtrueにしたテキストボックス「text1」とボタン「Command1」をフォームに貼り付け、以下のようなテストプログラムを作成してみました。(お見苦しいところありましたらすみません) Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Const EM_FMTLINES = &HC8 'ソフト改行文字を設定/削除する定数 Private Sub Command1_Click() Dim ret As Boolean Dim str As String ret = True 'ソフト改行文字を付加 Call SendMessage(Text1.hwnd, EM_FMTLINES, 1&, ByVal 0&) str = Text1.Text If InStr(str, vbCr & vbCr & vbLf) = 0 Then MsgBox "失敗!" ret = False End If 'ソフト改行文字を削除 Call SendMessage(Text1.hwnd, EM_FMTLINES, 0&, ByVal 0&) If ret = True Then MsgBox "成功" End If End Sub  テキストボックスの横幅をある程度狭くし、複数行になるよう適当に文字を入力しボタンをクリックすると、ほとんど成功するのですが、確かに20回に1回くらい失敗します。  失敗した際は何度ボタンをクリックしても失敗します。逆に成功した文字列でなんどもボタンをクリックしても成功しか帰ってきません。  試した環境   WindowsXP Pro SP2、Windows2000 SP4  なんとも法則性も見つからず、途方に暮れております。決方法やこんな事象ご存知でしたら助けて頂けないでしょうか。よろしくお願い致します。  

  •  DataGridViewとHScrollBarのバーの幅を合わせる

     DataGridViewとHScrollBarのバーの幅を合わせる  今晩は,質問させていただきます.どうぞよろしくお願いいたします.  HScrollBarでDataGridViewを連動させております。 DataGridView内のセル幅の変更に伴いバーの大きさが変更された際、 HScrollBarのバーの大きさもこれと同じにしたいのでございますが、 どのプロパティにどの数字を入れてやればよいのかが分からず、 1ヶ月ほど悩んでおりますorz  ためしに↓のようにコーディングいたしましたが、、、   Private Sub DGV1_ColumnWidthChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewColumnEventArgs) _     Handles DGV1.ColumnWidthChanged     With HScrollBar1       .Minimum = 0       .Maximum = (DGV1.Columns(0).Width + DGV1.Columns(1).Width _            + DGV1.Columns(2).Width + DGV1.Columns(3).Width _            + DGV1.Columns(4).Width + DGV1.Columns(5).Width)             '↑例えばColumnが0~5まである場合でございます。             'おそらく「.Maximum」に何か入れるのでは、、と              '推測している次第でございますが。。。     End With   End Sub ↑この場合、HScrollBarの幅がDataGridViewより小さくなったり してしまい、その状態のままHScrollBarを動かしてしまいますと、 DataGridViewを連動させることができずエラーになってしまいます。  以下、必要ないかもしれませんが、HScrollBarとDataGridViewを 連動させているコードでございます。   Private Sub HScrollBar1_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) _     Handles HScrollBar1.Scroll     DGV1.FirstDisplayedScrollingColumnIndex = e.NewValue       '↑ここでHScrollBarから大きい値が入ってしまい,       ' エラー「指定された引数は、有効な値の範囲にありません」になります。   End Sub  何かよい方法がございましたら,是非ともアドバイスいただきたくお願いいたします.  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします.

  • リッチテキストボックスの改行挿入について

    初めまして。Access初心者のものです。 下記リッチテキストボックスがフォーム上に2つあります。 →TextBox1 (連結)     連結先のメモ型フィールドの設定は、リッチテキストに設定してあります。 →TextBox2 (非連結) 下記、VBAを記述しましたところ、改行がうまくされず困っています。 TextBox1 = 変数 & "入力しました。" & Time & Chr(13) & Chr(10) & _ "----------------------------------" & Chr(13) & Chr(10) & _ TextBox2 & Chr(13) & Chr(10) & Chr(13) & Chr(10) & _ TextBox1 TextBox2 = "" リッチテキストボックスに格納されるデータは、下記のようになります。 変数 入力しました。 17:00:00---------------------------------- TextBox2 TextBox1 希望は、下記のようにデータを格納させたいです。 変数 入力しました。 17:00:00 (改行あり) ----------------------------------(改行あり) TextBox2(改行あり) (改行あり) TextBox1 解決策がありましたら、ご教授頂ければ幸いです。 よろしくお願いいたします。

  • アクセスのTextBox内で改行できるようにしたい

    過去ログをhttp://okwave.jp/qa4812389.html 参考にしてみましたがアクセスのテキストボックスで出来ません。 ”あああ”のあとにエンターキーを押しても何も変わりません。 TextBoxのプロパティを見ても”改行”というのが見つかりません。 どうすれば改行できますか?よろしくお願いします。

専門家に質問してみよう