プロが教えるわが家の防犯対策術!

変数内に入っているテキストから'が先頭にある行の色のみを灰色に変更して結果をリッチテキストボックスに表示するという事をしたいのですが、うまくいかず困っております・・。

最初は、変数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

A 回答 (3件)

VB.NETは未経験者なのでヘンな事言ってたらすみません。



text.IndexOf("'")というのは、textの中の文字列の中から最初に出てくる"'"の位置を返しますか?
とすると、例えば10文字目に"'"があるとすればtextの内容が変わらない限り
ずっとtext.IndexOf("'")は10なので、
>Loop While text.IndexOf("'") <= -1
という終了条件を抜け出せなくて無限ループになるのではないでしょうか?
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
はい、無限ループになる原因はおっしゃる通りなのですが、問題はそこではなく

下記のように直接文字列を指定して1文字目から2文字をグレーに変えるというコードを書いた場合でも、最初実行すると、ちゃんと2文字の色が変わるのですが、色が変わっている状態で再度同じコードを実行すると全体の文字色が変わってしまいまして・・。


RichTextBox1.SelectionStart = 1
RichTextBox1.SelectionLength = 2
RichTextBox1.SelectionColor = System.Drawing.Color.LightGray

お礼日時:2005/02/03 15:13

そうなんですか!?


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

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

お礼日時:2005/02/05 16:57

こんな事をしたいのですか?



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を調査してみると幸せになれるかも
    • good
    • 2
この回答へのお礼

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

お礼日時:2005/02/05 16:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!