2

WPF (4.0) で RichTextBox を使用し、GetPositionAtOffset() メソッドを使用して、RichTextBox のコンテンツ内の 2 つの位置の間のテキスト範囲を取得します。

1) MyRichTextBox.Document.ContentStart からテキスト ポインターの「位置」を初期化します。

TextPointer position = RTBEditor.Document.ContentStart;

2) RichTextBox から次のようにテキストを取得します。

var textRun = new TextRange(RTBEditor.Document.ContentStart, RTBEditor.Document.ContentEnd).Text;

3) Regex を使用して、textRun で必要な文字列を見つけ、開始のインデックスと終了のインデックスを取得します (「/*」と「*/」の間のテキストを検索します)。

Regex regex = new Regex(@"/\*([^\*/])*\*/");
var match = regex.Match(textRun);
TextPointer start = position.GetPositionAtOffset(matchBegin.Index, LogicalDirection.Forward);
TextPointer end = position.GetPositionAtOffset(matchBegin.Index + matchBegin.Length, LogicalDirection.Backward);

しかし、これらのポインターをテキスト範囲で使用して内部のテキストを色付けすると、RichTextBox で色付けされた正規表現 (商品インデックスを使用) に一致する適切なテキストではありません。

GetPositionAtOffset() メソッドが指定されたインデックスの位置を与えないのはなぜですか? それはこの方法の問題ですか、それとも他の場所ですか?

返信ありがとうございます。開発が止まっています。

4

2 に答える 2

1

これによると、https://msdn.microsoft.com/en-us/library/ms598662%28v=vs.110%29.aspx

GetPositionAtOffset は、現在の TextPointer の先頭から指定されたオフセット (シンボル単位)で示される位置に TextPointer を返します。

次のいずれかがシンボルと見なされます。

  • TextElement 要素の開始タグまたは終了タグ。

  • InlineUIContainer または BlockUIContainer に含まれる UIElement 要素。このような UIElement は常に 1 つのシンボルとしてカウントされることに注意してください。UIElement に含まれる追加のコンテンツまたは要素はシンボルとしてカウントされません。

  • テキスト Run 要素内の 16 ビット Unicode 文字。

于 2015-09-08T06:20:08.917 に答える