• ベストアンサー

RichTextBoxで指定行の色を自動で変更・・。

変数内に入っているテキストから'が先頭にある行の色のみを灰色に変更して結果をリッチテキストボックスに表示するという事をしたいのですが、うまくいかず困っております・・。 最初は、変数text内に文字列が入っているとして下記コードを書いたのですが、無限ループになってしまいますし、色々サイトを見ていて無理なんだと気づき、次はhttp://itsuko-m.hp.infoseek.co.jp/rtf04.htm を参考にしてみたのですが、やはり良く分かりません・・。 申し訳ありませんが、何か助言頂けると嬉しいです。 VB.NETです。 Do RichTextBox1.SelectionStart = text.IndexOf("'") RichTextBox1.SelectionLength = text.IndexOf(vbCrLf) - text.IndexOf("'") RichTextBox1.SelectionColor = System.Drawing.Color.LightGray Loop While text.IndexOf("'") <= -1

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

  • ベストアンサー
回答No.3

こんな事をしたいのですか? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   Dim text As String = _     "あいうえお" & vbCrLf & _     "'かきくけこ" & vbCrLf & _     "さしすせそ" & vbCrLf & _     "たちつてと" & vbCrLf & _     "'なにぬねの" & vbCrLf & _     "はひふへほ" & vbCrLf & _     "まみむめも" & vbCrLf & _     "'やゆよ" & vbCrLf & _     "らりるれろ" & vbCrLf & _     "わをん"   Me.RichTextBox1.Text = text   Dim rtb As RichTextBox = Me.RichTextBox1   Dim intS As Integer = 0   Dim intE As Integer = 0   While True     intS = rtb.Text.IndexOf("'"c, intS)     If intS = -1 Then       Exit While     Else       intE = rtb.Text.IndexOf(Chr(10), intS)       If intE = -1 Then         Exit While       Else         rtb.SelectionStart = intS         rtb.SelectionLength = intE - intS         rtb.SelectionColor = System.Drawing.Color.LightGray         intS = intE       End If     End If   End While End Sub IndexOfではvbCrLfは検索できませんね、何ででしょう オブジェクトブラウザで見ると「Chr(10) & Chr(13)」のString型なのに... RTFを調査してみると幸せになれるかも

Hasky
質問者

お礼

これですこれです、これがやりたかったんです!!! 本当にありがとうございます!! RTFも調べて更に幸せになってみます!!

その他の回答 (2)

回答No.2

そうなんですか!? フォームにリッチテキストとボタンを1つずつ貼り付け。 で、ボタンのクリックイベントに >RichTextBox1.SelectionStart = 1 >RichTextBox1.SelectionLength = 2 >RichTextBox1.SelectionColor = System.Drawing.Color.LightGray を書いて2度押すと全体の文字色がグレーになるということでしょうか? リッチテキストはVB6でもあるので、VB6で相当する処理を行ってみました。 結果は、何度実行ボタンを押しても2文字の色が変わるだけでした。 .NETになった時に何があったんでしょうね・・・。 ごめんなさい。お役には立てなかったみたいで。

Hasky
質問者

お礼

2回もお答え頂いてありがとうございましたm(__)m

回答No.1

VB.NETは未経験者なのでヘンな事言ってたらすみません。 text.IndexOf("'")というのは、textの中の文字列の中から最初に出てくる"'"の位置を返しますか? とすると、例えば10文字目に"'"があるとすればtextの内容が変わらない限り ずっとtext.IndexOf("'")は10なので、 >Loop While text.IndexOf("'") <= -1 という終了条件を抜け出せなくて無限ループになるのではないでしょうか?

Hasky
質問者

お礼

アドバイスありがとうございます。 はい、無限ループになる原因はおっしゃる通りなのですが、問題はそこではなく 下記のように直接文字列を指定して1文字目から2文字をグレーに変えるというコードを書いた場合でも、最初実行すると、ちゃんと2文字の色が変わるのですが、色が変わっている状態で再度同じコードを実行すると全体の文字色が変わってしまいまして・・。 RichTextBox1.SelectionStart = 1 RichTextBox1.SelectionLength = 2 RichTextBox1.SelectionColor = System.Drawing.Color.LightGray

関連するQ&A

専門家に質問してみよう