2012-03-24 7 views
2

OK people、私は基本的にc#.netのRichTextBoxと対話しなければならないクラスを作成しています。その主な機能の1つは、ユーザーが特別な単語を入力したかどうかを検出することです。単語の色を変更する必要がある場合は、ワードプロセッサのように一致する単語を探します。テキストの一定の修正のための効率的なアプローチ

RTB(RichTextBox)のテキストが変更されるたびに検索することを考えていたため、効果的な方法で行う方法がわかりませんが、検索するにはあまりにも非効率ですユーザーが新しい単語を入力するたびにRTB全体が表示されます(RTB内のテキストが長いことを考慮して)。

RTBに入力された最後の文字を取得し、単語が形成されているかどうかを確認して特殊単語かどうかを確認する方法が見つかりましたが、RTBのテキストが関数または貼り付けテキストの場合は動作しません。 RTBのテキストはさまざまな方法で変更できることを考慮する必要があります。

RTBでテキストを変更して特別な単語を見つけるたびに完全検索するのは効率的でしょうか? (それに関するテキストが長いかもしれないことを考慮に入れて)、あるいは皆さんが心に留めている他のアプローチがありますか?

EDIT:誰かが私を解決する方法を見つけた興味あるまあ

場合に----------------------------問題。

RTT内のRichTextBox_SelectionChangedで選択が変更されるたびに、現在の選択位置(カーソルの現在の位置または最後に知っている位置)を追跡するために、クラス内の整数を使用しました。このように:

private void richTextBox1_SelectionChanged(object sender, EventArgs e) 
{ 
    LastCursorPosition = CurrentCursorPosition; 
    CurrentCursorPosition = richTextBox1.SelectionStart; 
    CursorsDifferences = CurrentCursorPosition - LastCursorPosition; 

} 

このCurrentCursorPositionは、ユーザーが文字をタイプするたびに更新またはRTBとLastCursorPosition内のテキストは保持されます修正されることを保証します、よく私はそれを言っているのですか?その後、カーソル位置の違いはCursorsDifferencesに保存されます。ユーザーが何かをRTBに貼り付けると、カーソルが挿入された文字列の長さがわかります。それに基づいて、 LastCursorPositionからCurrentCursorPositionに検索を実行できます。

注:LastCursorPositionからCurrentCursorPositionへの検索は、LastCursorPositionが単語の先頭でない可能性があるため、正確ではない可能性があります。したがって、以前の ''(ホワイトスペース)または '\ n'(改行) ''または '\ n'の前に文字を置き、その位置に基づいて検索を行うと、同じことがCurrentCursorPositionに適用されます。

+0

いくつの特別な単語がありますか?あなたは完全な検索を試みたことがありますか? –

+0

@CaseyWilkinsどのようにベンチマークしますか?パフォーマンスが悪いと思われるものは何ですか?反対に何ですか? –

+1

@torrentialcoding、最終的に、OPは自分の特定のアプリケーションのパフォーマンスが低いと判断する必要があります。 「特別な」単語セットを探していて、そのセットが小さい場合は、テキストボックスの文字列と一致する値のリストを単に比較するだけで完璧に(そして速く)行うことができます。 –

答えて

0

誰かが興味を持っている場合は、問題を解決する方法を見つけました。

RTT内のRichTextBox_SelectionChangedで選択が変更されるたびに、現在の選択位置(カーソルの現在の位置または最後に知っている位置)を追跡するために、クラス内の整数を使用しました。このように:

private void richTextBox1_SelectionChanged(object sender, EventArgs e) 
{ 
    LastCursorPosition = CurrentCursorPosition; 
    CurrentCursorPosition = richTextBox1.SelectionStart; 
    CursorsDifferences = CurrentCursorPosition - LastCursorPosition; 

} 

このCurrentCursorPositionは、ユーザーが文字をタイプするたびに更新またはRTBとLastCursorPosition内のテキストは保持されます修正されることを保証します、よく私はそれを言っているのですか?その後、カーソル位置の違いはCursorsDifferencesに保存されます。ユーザーが何かをRTBに貼り付けると、カーソルが挿入された文字列の長さがわかります。それに基づいて、LastCursorPositionからCurrentCursorPositionへの検索を実行できます。

注:LastCursorPositionをCurrentCursorPositionに検索すると、LastCursorPositionが単語の先頭でない可能性があるため、前の '(白い文字)または' \ n '(改行)を見つけて、 ''または '\ n'の前の文字を検索し、その位置に基づいて検索すると、同じことがCurrentCursorPositionに適用されます。

関連する問題