RichTextBoxで、指定箇所の色を変更するには?

解決


アンダーソン君  2003-09-20 19:51:51  No: 108761

VB初心者なのですが、RichTextBoxの指定した箇所の色を変えるにはどうしたらいいですか?

あと、
「A」表示⇒Aの色変更(緑)⇒「B」表示⇒Bの色変更(青)
を実行するとしても、RichTextで十分ですか?

(過去ログを見て、RichTextBoxのSelColorを使ってみたんですが、全部の色が変わってしまいました…(悲))

よろしくお願いします。


ねろ  URL  2003-09-21 01:39:17  No: 108762

>全部の色が変わってしまいました
選択の範囲が全部になっているのでは?
マウスやキーボードで変えたい文字だけ選択するか
RichTextBox1.SelStart
RichTextBox1.SelLength
で範囲を選択します。

>「A」表示⇒Aの色変更(緑)⇒「B」表示⇒Bの色変更(青)
これはどのような意味でしょうか?
"A"の文字が出てきたら緑に、"B"の文字が出てきたら青に
ということですか。(^^;


Mrアンダーソン  2003-09-22 19:33:16  No: 108763

お返事、ありがとうございます。

MsgTextBox.Text = "Hello"  & vbNewLine & MsgTextBox.Text
MsgTextBox.SelStart = 0
MsgTextBox.SelLength = 5
MsgTextBox.SelColor = RGB(0, 128, 0)

という記述をしたところ、
・Helloが選択された状態(反転状態)になる。
・もう一度、この処理をやると、全ての行の色が変わる
ちう問題がでてきました。コードの書き方、おかしいのでしょうか?

あと、条件1の時は"Hello"(緑)、条件2の時は"GOOD-BYE"(赤)が表示されるような文を作りたいのですが、メッセージをためていくとすると、メッセージがたまっていく毎に、全ての行を塗りなおす事になるのでしょうか?

<↓表示イメージ>(一番上の行に、次々とメッセージが追加されていく予定)
Hello(緑)
Hello(緑)
GOOD-BYE(赤)
Hello(緑)

ちょっと説明わかりにくいかもしれませんが、よろしくお願いします。


ねろ  2003-09-23 00:47:05  No: 108764

>Helloが選択された状態(反転状態)になる。
上のコードの最後に
MsgTextBox.SelLength = 0
を入れれば選択されません。

>もう一度、この処理をやると、全ての行の色が変わる
>全ての行を塗りなおす事になるのでしょうか
これは本質的に同じ質問であると思いますが、
基本的には全ての色を設定しなおす必要があると思います。(^^;
この質問を言い直すと、
MsgTextBox.Text = "Hello"  & vbNewLine & MsgTextBox.Text
のとき  「& MsgTextBox.Text」で前のMsgTextBoxの文字の色の属性が
"Hello"に足されるか?と言う質問になると思いますが、足される場合も
あるし足されない場合もあります。確実に色分けをする為には再設定が必要です。

[追加]
RichTextBoxの色変更はMsgTextBox.SelColorで行う方法と
MsgTextBox.TextRTFを直接書き換える方法と2つの方法があります。
短いText文を色分けする場合はTextBox.SelColorを使いますがText文が
少し長くなる場合は(1K以上)この方法では考えられないような長い時間が
かかります。そのような場合はMsgTextBox.TextRTFを直接書き換えます。


satoru-i  2003-09-23 23:27:29  No: 108765

SelTextを使って、こんな風にしてみてはどうでしょうか?
(当方VB6ではできましたが、他のバージョンはわかりませんので試してください。)

まず空っぽに
MsgTextBox.text = ""

1つ目
MsgTextBox.SelStart = 0
MsgTextBox.SelLength = 0
MsgTextBox.SelColor = RGB(0, 128, 0)
MsgTextBox.SelText = "Hello" & vbCrLf

2つ目
MsgTextBox.SelStart = 0
MsgTextBox.SelLength = 0
MsgTextBox.SelColor = RGB(255, 0, 0)
MsgTextBox.SelText = "Good-Bye" & vbCrLf

リードオンリーでご無沙汰してましたが、久々に書き込んでみました。では。


Mr.アンダーソン  2003-09-24 17:22:13  No: 108766

申し訳ありません、レス遅くなりました。
satoru-iさんのソースをそのまま書いたら、
ウソみたいにうまくいきました。b(`)
レスくれた皆様、ほんっとーにありがとうございました!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加