- 題名: RichTextBoxで行単位編集
- 日時: 2005/03/23 18:40:03
- ID: 10029
- この記事の返信元:
- (なし)
- この記事への返信:
- [10032] Re[1]: RichTextBoxで行単位編集2005/03/23 20:17:01
- [10043] Re[1]: RichTextBoxで行単位編集2005/03/23 21:32:14
- [10053] Re[1]: RichTextBoxで行単位編集2005/03/24 10:19:55
- ツリーを表示
一応私がやっているコードを載せます。
'--------------------------------------------------------------------------
' Function : リッチテキストボックスを更新
' Parameter: <Message> 説明文
' : <Save>省略可、ログファイルに追記保存。Default=False
' : <Color>省略可、文字の色。Default=Black
' : <Lines>省略可、更新する行を指定。Default=0(追記モード)
' : <FontSize>省略可、更新する行のフォントサイズを指定。Default=10
' : <BoldStyle>省略可、更新する行の太文字を指定。Default=False
' ReturnVal:
'--------------------------------------------------------------------------
Private Sub TestMessage(ByVal Message As String)
Dim CurLen As Integer = RichTextBoxTestMessage.Text.Length '更新前のテキスト長
Dim CurLines As Integer = RichTextBoxTestMessage.Lines.Length '更新前の行数
If Lines = 0 Then
'更新行=0の場合は追記
RichTextBoxTestMessage.AppendText(Message & vbCrLf)
RichTextBoxTestMessage.Select(CurLen, Message.Length)
ElseIf Lines > CurLines Then
'更新行が現在より大きい場合
'0行の場合はループしない
If CurLines = 0 Then Lines -= 1
'不足分を改行で埋める
Dim cr, p As Integer
For cr = 0 To Lines - CurLines - 1
RichTextBoxTestMessage.AppendText(vbCrLf)
Next
RichTextBoxTestMessage.AppendText(Message & vbCrLf)
p = RichTextBoxTestMessage.Find(Message, RichTextBoxFinds.Reverse)
RichTextBoxTestMessage.Select(p, Message.Length)
ElseIf CurLines >= Lines Then
'更新行が現在より小さいか同じ場合
'更新行の先頭をさがす
Dim i, Sea As Integer
For i = 1 To Lines - 1
Sea += RichTextBoxTestMessage.Lines(i - 1).Length + 1
Next
RichTextBoxTestMessage.Select(Sea, RichTextBoxTestMessage.Lines(Lines - 1).Length)
RichTextBoxTestMessage.SelectedText = Message
RichTextBoxTestMessage.Select(Sea, Message.Length)
End If
'スタイル、サイズを更新
If BoldStyle = False Then
RichTextBoxTestMessage.SelectionFont = New Font(RichTextBoxTestMessage.Font.FontFamily, FontSize, FontStyle.Regular)
Else
RichTextBoxTestMessage.SelectionFont = New Font(RichTextBoxTestMessage.Font.FontFamily, FontSize, FontStyle.Bold)
End If
'文字色を決定
Dim col As System.Drawing.Color
Select Case LineColors
Case Colors.Black : col = Color.Black
Case Colors.Blue : col = Color.Blue
Case Colors.Green : col = Color.Green
Case Colors.Red : col = Color.Red
End Select
'色変更
RichTextBoxTestMessage.SelectionColor = col
'非選択状態へ
'HideSelection=Falseが条件でオートスクロール
RichTextBoxTestMessage.SelectionStart = RichTextBoxTestMessage.TextLength
RichTextBoxTestMessage.SelectionLength = 0
Application.DoEvents()
'ログファイルに追記する
If Save = True Then
Try
TestLogSave(Message)
Catch ex As Exception
Throw ex
End Try
End If
End Sub
'--------------------------------------------------------------------------
' Function : リッチテキストボックスをクリア
' Parameter: <Lines>省略可、最終行から削除する行数を指定。Default=0(全削除モード)
' : ex. 1 = 最終行から1行削除、5 = 最終行から5行削除
' ReturnVal:
'--------------------------------------------------------------------------
Private Sub TestMessageErase(Optional ByVal Lines As Integer = 0)
If Lines >= RichTextBoxTestMessage.Lines.Length - 1 OrElse Lines = 0 Then
RichTextBoxTestMessage.Clear() '全削除
Return
End If
'更新行の先頭をさがす
Dim i, Sea, loc As Integer
Dim strBuffer As String
loc = RichTextBoxTestMessage.Lines.Length - Lines
For i = 1 To loc - 1
Sea += RichTextBoxTestMessage.Lines(i - 1).Length + 1
Next
RichTextBoxTestMessage.Select(Sea - 1, RichTextBoxTestMessage.Text.Length)
RichTextBoxTestMessage.SelectedText = Environment.NewLine
Application.DoEvents()
End Sub
分類:[.NET]
こんにちは、はじめまして。.NETを初めて以来こちらにお世話になっています。
早速質問させてください。
リッチテキストボックスにて指定行の更新・削除にて行き詰まってしまい困り果てています。
御教示いただけますよう宜しくお願いします。
リッチテキストボックスに書式付(色、太文字)で1000行くらい書いた(ApendText等)ものにたいして
例えば300行目を消すとか、500行目の文字列を書き換えるなどの処理です。
計算結果などのログ出力に用いていまして、ユーザーの編集はありません。
更新及び削除は行単位をコーディングで行います。
For文で指定行の先頭までのTextLengthを調べ、指定行を選択して、更新・削除・・・
などとやっていますと、ものすごく時間がかかってしまって使い物になりません。
最終行の更新や削除などは数秒かかってしまいます。
RichTextBox.Linesを別Arrayにコピーしてみたり、Redimしてみましたが、それでは書式が失われてしまいます。
#RichTextBoxを使用したい目的は、行内に存在する規定の文字列に色を使いたいだけなのです。
どうか宜しくお願いします。