2016-04-25 9 views
0

私はwinformアプリケーションを使用しています。ユーザーが入力したテキストのすべての数字を見つけてハイライトする必要があります。このために、フォームの要素ホストにwpf richtextboxを追加しています。ボタンをクリックすると、テキストボックスにあるテキストが読み込まれ、すべての数字が検索されます。問題は、番号の最後のインスタンスだけが強調表示されていて、すべてのインスタンスではないことです。例のテキストのために - "注文は12ベーグルです。住所は13456 Lame stです" 13456だけが強調表示されます。コードは次のとおりです。wpf richtextboxのテキスト内の数字のインスタンスをすべて見つける

private void btnSave_Click(object sender, EventArgs e) 
    { 
     var wpfTextBox = (System.Windows.Controls.RichTextBox)elementHost1.Child; 
     Regex reg = new Regex("[0-9 -()+]+$"); 
     var start = wpfTextBox.Document.ContentStart; 
     while (start != null && start.CompareTo(wpfTextBox.Document.ContentEnd) < 0) 
     { 
      if (start.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text) 
      { 
       var match = reg.Match(start.GetTextInRun(LogicalDirection.Forward)); 

       var textrange = new TextRange(start.GetPositionAtOffset(match.Index, LogicalDirection.Forward), start.GetPositionAtOffset(match.Index + match.Length, LogicalDirection.Backward)); 
       textrange.ApplyPropertyValue(TextElement.ForegroundProperty, new SolidColorBrush(Colors.Blue)); 
      } 
      start = start.GetNextContextPosition(LogicalDirection.Forward); 

     } 

    } 

ありがとうございます!

答えて

2

ハイライトのコードが正常に動作しているようですが、正規表現をtesterで実行しましたが、指定した文字列の数字が表示されませんでした。提供した文字列内のすべての数字をハイライトするために、正規表現をこれに置き換えました。

Regex reg = new Regex(@"\d+"); 

この例では、指定した例の数値が強調表示されていますが、すべての場合に必要なすべての数値と一致しないことがあります。正規表現を微調整するには、上のリンク先のようなオンラインツールを使うことを強くお勧めします。

+0

これを指摘していただきありがとうございます - 私は別のアプリで同じ正規表現を使用し、それは私が正規表現が問題になるとは思わなかったので、私が探していた数字パターンのために働いた。 – user6166859

関連する問題