- 題名: 文字列の色を変更
- 日時: 2004/12/22 22:07:15
- ID: 8165
- この記事の返信元:
- (なし)
- この記事への返信:
- [8167] Re[1]: 文字列の色を変更2004/12/23 0:03:32
- ツリーを表示
こんにちは、じゃんぬねっと です。
■No8172に返信(シノアさんの記事)
> 自分はリアルタイムで変更が出来るようにしたいのですが
> どのように対処すればよいでしょうか?
貴方がおっしゃる「リアルタイム」という言葉の意味合いは、
TextChanged() イベント以前ということなのでしょうか? (^-^;)
> Private Sub RichTextBox1_KeyDown(中略) Handles RichTextBox1.KeyDown
「リアルタイム」にやりたいのでしたら、
KeyEventArgs 引数を加味する必要がありますよね?
なんせ、Text も Rtf も更新されていないのですから。(^-^;)
# 仮にそれでやるのでしたら KeyPress() イベントの方が良かったりしますが。
# しかしながら、TextChanged() イベントでもチラつきませんからこっちを使った方が...
> このイベントをボタンをクリックした時のイベントにすると正常に動作するのですが
まあ、TextChanged() イベントでとりあえずやってみては如何でしょうか?
再入しないように、工夫する必要はありますが、とりあえずってことで。
> それと、正常でないというよりも
> カーソルが常に一番前に来てしまうという現象です
貴方のアルゴリズムを"そのまま"に、作り直してみました。
# なるべく .NET Framework を使うようにしましょうね。
# なるべく 意味のある変数名にしましょうね。
# グチャグチャだと自覚しているなら、コメント書いちゃいましょうね。
# そうしないとレスが付き難くなってしまいますよ。
# タグ開始位置を削除した場合の処理が抜けてるなど、色々問題があるような気がします。
' 再入を防ぐ Bool 値
Private mIsNotReEnter As Boolean
Private Sub RichTextBox1_TextChanged(中略) Handles RichTextBox1.TextChanged
If mIsNotReEnter = True Then Return
Dim nRtf As String
Dim iColorTbl As Integer
Dim iEndTbl As Integer
Dim iSelStart As Integer
' RTF を取得
nRtf = RichTextBox1.Rtf
' ColorTbl 位置の取得 (InStrの変わりに String.IndexOf() メソッドを使うべき)
iColorTbl = nRtf.IndexOf("{\colortbl")
' 見つかった場合
If iColorTbl >= 0 Then
iEndTbl = nRtf.IndexOf("}"c, iColorTbl)
' 削除 (文字を消す際は、妙な置換なんてやめて String.Remove() メソッドを使おうね)
nRtf = nRtf.Remove(iColorTbl, iEndTbl - iColorTbl + 1)
End If
' \viewkind 前に colortbl を付加 (本当は Insert() メソッドを使った方が良い)
nRtf = nRtf.Replace("\viewkind", "{\colortbl ;\red255\green0\blue0;}" & vbCrLf & "\viewkind")
nRtf = nRtf.Replace("<", "<\cf1")
nRtf = nRtf.Replace(">", "\cf0>")
' カーソル(?) 位置を取得
iSelStart = RichTextBox1.SelectionStart
' RTF を置き換え
mIsNotReEnter = True
RichTextBox1.Rtf = nRtf
mIsNotReEnter = False
' カーソル(?) 位置を復元
RichTextBox1.SelectionStart = iSelStart
End Sub
分類:[.NET]
こんばんは、HTMLエディタとプログラミング用エディタを製作しているのですが
ある、文字が入力されたら文字列の色を変更されるようにしたいのですが
どうすればよいのか困りました。
いろいろなサイトを閲覧してみたところ
カラーテーブルの値を変更する・・・・とだけしか
ないので、さっぱりです。
まず、RichTextBoxにどのようなことをさせればよいのでしょうか?