- ベストアンサー
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
- みんなの回答 (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を調査してみると幸せになれるかも
その他の回答 (2)
- pen_pen_pen
- ベストアンサー率65% (52/79)
そうなんですか!? フォームにリッチテキストとボタンを1つずつ貼り付け。 で、ボタンのクリックイベントに >RichTextBox1.SelectionStart = 1 >RichTextBox1.SelectionLength = 2 >RichTextBox1.SelectionColor = System.Drawing.Color.LightGray を書いて2度押すと全体の文字色がグレーになるということでしょうか? リッチテキストはVB6でもあるので、VB6で相当する処理を行ってみました。 結果は、何度実行ボタンを押しても2文字の色が変わるだけでした。 .NETになった時に何があったんでしょうね・・・。 ごめんなさい。お役には立てなかったみたいで。
お礼
2回もお答え頂いてありがとうございましたm(__)m
- pen_pen_pen
- ベストアンサー率65% (52/79)
VB.NETは未経験者なのでヘンな事言ってたらすみません。 text.IndexOf("'")というのは、textの中の文字列の中から最初に出てくる"'"の位置を返しますか? とすると、例えば10文字目に"'"があるとすればtextの内容が変わらない限り ずっとtext.IndexOf("'")は10なので、 >Loop While text.IndexOf("'") <= -1 という終了条件を抜け出せなくて無限ループになるのではないでしょうか?
お礼
アドバイスありがとうございます。 はい、無限ループになる原因はおっしゃる通りなのですが、問題はそこではなく 下記のように直接文字列を指定して1文字目から2文字をグレーに変えるというコードを書いた場合でも、最初実行すると、ちゃんと2文字の色が変わるのですが、色が変わっている状態で再度同じコードを実行すると全体の文字色が変わってしまいまして・・。 RichTextBox1.SelectionStart = 1 RichTextBox1.SelectionLength = 2 RichTextBox1.SelectionColor = System.Drawing.Color.LightGray
お礼
これですこれです、これがやりたかったんです!!! 本当にありがとうございます!! RTFも調べて更に幸せになってみます!!