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 の実装には少し欠陥があるようです。