2012-05-21 14 views
6

RichTextBoxで強調表示する必要がある大きなオフセットのリストがあります。しかし、このプロセスは長すぎます。私は次のコードを使用しています:RichTextBoxの強調表示が長すぎます

foreach (int offset in offsets) 
{ 
    richTextBox.Select(offset, searchString.Length); 
    richTextBox.SelectionBackColor = Color.Yellow; 
} 

もっと効率的な方法がありますか?

UPDATE:このメソッドを使用してみました

が、それは何をハイライト表示されません:あなたは、ループの外にSelectionBackColorを設定している場合

richTextBox.SelectionBackColor = Color.Yellow; 
foreach (int offset in offsets) 
{ 
    richTextBox.Select(offset, searchString.Length); 
} 
+0

申し訳ありませんが、私はwinformsについての質問は分かりませんでした。私は自分の答えを削除して、あなたの質問に再び答えられないようにします。 – dasblinkenlight

+0

ありがとうとにかく@dasblinkenlight – user1135357

+0

可能な複製[RichTextBoxの構文強調表示をリアルタイムで - 再描画を無効にする](http://stackoverflow.com/questions/3282384/richtextbox-syntax-highlighting-in-real-time-disabling-the -repaint) –

答えて

0

それはどんな違いがありますか?

ReflectorでRichTextBoxを見ると、色が設定されるたびにWindowMessageがコントロールに送信されます。オフセットの数が多い場合、既に強調表示されている単語を繰り返し強調表示し、O(n^2)の動作につながる可能性があります。

+0

すでに試しました。これは何もハイライトしません: 'richTextBox.SelectionBackColor = Color.Yellow; foreach(オフセット内の整数オフセット) { richTextBox.Select(offset、searchString.Length); } ' – user1135357

1

私はあなたの問題を探検し、RichTextBoxが非常に多くの行を持っているときに遅くなっていることがわかりました。
私の意見では、パフォーマンスによって満足できる3番目の部分コントロールを購入するか、選択タスク全体を逸脱するスレッドが必要な場合があります。私は彼らが物事を加速すると思う。
お手伝い願います!

+0

私はこの[control](http://www.telerik.com/products/winforms/richtextbox.aspx)が私の問題を解決するだろうと思っています – user1135357

+0

私はtelerikとdevexpressコントロールに関してたくさんの良いことを聞いていました。あなたに問題を公開し、どのような解決策があなたに提供されるのかを躊躇しないでください。 – HichemSeeSharp

+0

上記のいずれかの解決策に陥る場合は、回答としてマークしてください。 – HichemSeeSharp

1

私はこれまで同じ問題を抱えていました。私は彼らがあなたに与えたすべての方法を無視し、根底にあるRTFデータを操作しました。また、コードの2番目のブロックが機能しない理由は、RTFが書式設定を適用することです。そのため、選択された色を変更する関数(またはこの場合はProperty)を呼び出すと、現在選択されているブロック。その呼び出し後に選択に加えられた変更は、関係なくなります。

RTFコントロール内でさまざまな操作を行う方法については、RGB値またはhere is a great sourceで遊ぶことができます。あなたのコードでこの関数をポップし、それがどれくらいうまく動作するかを見てください。私はそれを使用して、SQLコードのためのリアルタイムの構文ハイライトを提供します。

public void HighlightText(int offset, int length) 
    { 
     String sText = richTextBox.Text.Trim(); 
     sText = sText.Insert(offset + length - 1, @" \highlight0"); 
     sText = sText.Insert(offset, @" \highlight1"); 
     String s = @"{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Courier New;}} 
      {\colortbl ;\red255\green255\blue0;}\viewkind4\uc1\pard"; 
     s += sText; 
     s += @"\par}"; 
     richTextBox.Rtf = s; 
    } 
+0

申し訳ありませんがあなたのコードをよく理解していませんでしたが、アプリケーションにコードをコピーして貼り付けるだけで、何かを強調したいときにこのメソッドを呼び出しました。まったく働きません。とにかく、あなたの助けに感謝します。あきらめる! – user1135357

関連する問題