- 題名: 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を使用したい目的は、行内に存在する規定の文字列に色を使いたいだけなのです。
どうか宜しくお願いします。