前提・実現したいこと
Windows Formsでテキストエディタ用のコントロールを作っています。
キーワードのハイライトを実装するためにテキストを一文字ずつ描画しているのですが、
表示される文字が多いほど描画に時間がかかり、スクロールや文字入力が軽快にできなくなります。
高速に文字を描画する方法や、別の実装方法はあるのでしょうか。
該当のソースコード
C#
1using System; 2using System.Windows.Forms; 3using System.Drawing; 4 5private void RenderText( Graphics g ) 6{ 7 // _Characters にTextを一文字ずつに分けて入れています 8 9 int textLeft = _CharWidth * 4 + 12; 10 11 if (_Characters == null) return; 12 13 int lineLoop = 0; 14 int charIndex = 0; 15 16 int ss = _SelectStart; 17 int sl = _SelectLength; 18 19 20 for ( int i = _Scroll; i < _Characters.Length; i++ ) 21 { 22 if (lineLoop >= _MaxDisplayLine) break; 23 24 if (_Characters[i] == null) break; 25 26 for ( int j = 0; j < _Characters[i].Length; j++ ) 27 { 28 29 if (charIndex >= ss && charIndex < ss + sl) 30 { 31 SolidBrush brush = new SolidBrush(ColorSettings.SelectedTextBack); 32 g.FillRectangle(brush, textLeft + (_CharWidth * j), lineLoop * Font.Height, _CharWidth, Font.Height); 33 brush.Dispose(); 34 35 } 36 37 if (_Characters[i][j] == ' ') 38 { 39 charIndex++; 40 continue; 41 } 42 43 TextRenderer.DrawText(g, _Characters[i][j].ToString(), Font, new Point(textLeft + (_CharWidth * j), lineLoop * Font.Height), _Colors[i][j], TextFormatFlags.NoPadding); 44 45 charIndex++; 46 } 47 48 lineLoop++; 49 } 50} 51
回答1件
あなたの回答
tips
プレビュー