2

RichTextBox 内のテキストを選択するために (後ろから前に) ドラッグすると、Selection.Text は実際の選択と一致します。ただし、(前後に) ドラッグして同じ RichTextBox 内のテキストを選択すると、Selection.Text は常に空の文字列になります。

この情報が必要な理由は、RichTextBox 内のテキストを再解析 (すべてのテキストをクリアして再入力することを含む) した後、キャレットを元の位置に戻す必要があるためです。

私の目標は、選択の開始のオフセットを取得することです。それを使用して、そこで停止する文字列を取得できます。これを使用して、解析の最後にキャレットを置き換えます。

if (String.IsNullOrWhiteSpace(Selection.Text))
                restartPosition = activeRun.ContentStart.GetOffsetToPosition(CaretPosition.GetInsertionPosition(LogicalDirection.Forward));
            else
                restartPosition = activeRun.ContentStart.GetOffsetToPosition(Selection.Start);

鍵はその「if」ステートメントにあります。選択範囲がない場合は、カーソルがある場所にテキスト ポインターを使用できます。ただし、選択がある場合は、その開始が必要です。皮肉なことに、それが別の方向に失敗したとしても、問題にはなりません。

選択範囲を正確に取得する方法はありますか? Microsoft の実装には少し欠陥があるようです。

4

1 に答える 1

1

ということで、壊れませんでした。CaretPosition を変更すると、選択がクリアされます。それが起こっていたのです。今ではチャンピオンのように機能します。

于 2012-10-23T20:27:20.187 に答える