代码之家  ›  专栏  ›  技术社区  ›  iaskyou

使用Regex并更新richtextbox wpf c中的文本#

  •  1
  • iaskyou  · 技术社区  · 10 年前

    我这里有一段代码:

        mainWindow.Dispatcher.Invoke(new Action(() =>
                                mainWindow.richtextbox2.Document.Blocks.Add(new Paragraph(new Run("Hello")))));
    
       string myText = new TextRange(mainWindow.richtextbox2.Document.ContentStart, mainWindow.richtextbox2.Document.ContentEnd).Text;
    
       //replace two or more consecutive spaces with a single space, and
       //replace  two or more consecutive newlines with a single newline.
       var str = Regex.Replace(myText, @"( |\r?\n)\1+", "$1", RegexOptions.Multiline);
       mainWindow.Dispatcher.Invoke(new Action(() =>
                                mainWindow.richtextbox2.Document.Blocks.Add(new Paragraph(new Run(str)))));
    

    我知道Hello一开始就多余了。我想同时删除这种冗余,我还想删除每个文本行中的间距。这是我在三次跑步中拍摄的截图。

    enter image description here

    我怎样才能解决这个问题?请修改代码。

    编辑:现在是我更改richtextbox的XAML后的屏幕截图。我怎样才能从第一行开始呢?

    enter image description here

    2 回复  |  直到 10 年前
        1
  •  2
  •   Mihai Hantea Sefa    10 年前

    在xaml中尝试(我制作了演示):

    <RichTextBox HorizontalAlignment="Left" Height="100" Margin="190,83,0,0" VerticalAlignment="Top" Width="100">
            <RichTextBox.Resources>
                <Style TargetType="{x:Type Paragraph}">
                    <Setter Property="Margin" Value="0"/>
                </Style>
            </RichTextBox.Resources>
            <FlowDocument>
                <Paragraph>
                    <Run Text="RichTextBox"/>
                </Paragraph>
            </FlowDocument>
        </RichTextBox>
    

    在代码中:

    //这可以添加到调用方法中

    mainWindow.Dispatcher.Invoke(new Action(() => DoSomething));
    
    private void DoSomething(){
        string myText = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd).Text;
        var resultString = Regex.Replace(myText, @"( |\r?\n)\1+", "$1");
        MemoryStream stream = new MemoryStream(ASCIIEncoding.Default.GetBytes(resultString));
        richTextBox.SelectAll();
        richTextBox.Selection.Load(stream, DataFormats.Text);
    }
    

    Resources (WPF)

        2
  •  1
  •   Max Mazur    10 年前

    这可能是一种选择。。它会删除一些间距,但不确定是否需要删除更多间距。

    <RichTextBox Name="richtextbox2" Height="100" BorderBrush="Black" BorderThickness="1">
            <RichTextBox.Resources>
                <Style TargetType="{x:Type Paragraph}">
                    <Setter Property="Margin" Value="0"/>
                </Style>
            </RichTextBox.Resources>
        </RichTextBox>