【问题标题】:Delete paragraphs in RichTextBox on button click单击按钮时删除 RichTextBox 中的段落
【发布时间】:2014-09-19 20:33:39
【问题描述】:

我有一个RichTextBox 和一些Buttons(TEMPLET1,TEMPLET2,TEMPLET3....)。当第一次单击按钮时,2 段文本将添加到 RichTextBoxFlowDocument

下面是应用程序的屏幕截图。



我的问题是,当我第二次单击相应的模板按钮时,如何从 RichTextBox 删除特定模板。

欢迎提出任何想法。如果有人可以为此提供示例代码,那就太好了。

提前致谢。

【问题讨论】:

  • RichTextBox 顾名思义,只允许里面的文本。尽管在您的图像中看起来很奇怪。尝试添加一个列表框,每当单击按钮时添加“X”,当按下 X 时确定其编号并删除相应的行。
  • @Maximus 您能否提供示例代码,因为我是 wpf 的新手。那将是一个很大的帮助。谢谢。
  • 删除 3 行文本,如果你调整窗口大小并且每个条目只占 2 行,这是否也适用?
  • @PawBaltzersen 抱歉误导,实际上添加了 2 段,我想在单击按钮时删除它们。请再次检查我的问题,我已对其进行了编辑。

标签: c# wpf richtextbox flowdocument


【解决方案1】:

我不清楚您的 删除 部分。你想把它从屏幕上隐藏还是一起删除标签?

如果您只想将其隐藏在屏幕上,我有一个简单的解决方案。

编辑 根据您提供的详细信息更改了答案。

MainWindow.xaml

<DockPanel>
    <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
        <Button Content="Template 1" Click="Button_Click_1" Focusable="False"/>
        <Button Content="Template 2" Click="Button_Click_2" Focusable="False"/>
        <Button Content="Template 3" Click="Button_Click_3" Focusable="False"/>
        <Button Content="Template 4" Click="Button_Click_4" Focusable="False"/>
    </StackPanel>
    <RichTextBox x:Name="rchOne">
        <FlowDocument x:Name="flowDoc" />
    </RichTextBox>
</DockPanel>

MainWindow.cs

public partial class MainWindow : Window
{
    private bool paraOneAdded = false;
    private bool paraTwoAdded = false;
    private bool paraThreeAdded = false;
    private bool paraFourAdded = false;
    public MainWindow()
    {
        InitializeComponent();
    }



    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        if (!paraOneAdded)
        {
            Paragraph para = new Paragraph();
            para.Name = "temp1";
            para.Inlines.Add(new Bold(new Run("Template 1.")));
            para.Inlines.Add(new LineBreak());
            para.Inlines.Add("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean Condimentum, orci eu placerat interdum, odio lacus faucibus ex, et viverra justo sem nec augue.");
            flowDoc.Blocks.Add(para);
            paraOneAdded = true;
        }
        else
        {
            var myPara = flowDoc.Blocks.FirstOrDefault(p => p.Name == "temp1");
            if (myPara != null)
            {
                flowDoc.Blocks.Remove(myPara);
                paraOneAdded = false;
            }
        }
    }

    private void Button_Click_2(object sender, RoutedEventArgs e)
    {
        if (!paraTwoAdded)
        {
            Paragraph para = new Paragraph();
            para.Name = "temp2";
            para.Inlines.Add(new Bold(new Run("Template 2.")));
            para.Inlines.Add(new LineBreak());
            para.Inlines.Add("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean Condimentum, orci eu placerat interdum, odio lacus faucibus ex, et viverra justo sem nec augue.");
            flowDoc.Blocks.Add(para);
            paraTwoAdded = true;
        }
        else
        {
            var myPara = flowDoc.Blocks.FirstOrDefault(p => p.Name == "temp2");
            if (myPara != null)
            {
                flowDoc.Blocks.Remove(myPara);
                paraTwoAdded = false;
            }
        }

    }

    private void Button_Click_3(object sender, RoutedEventArgs e)
    {
        if (!paraThreeAdded)
        {
            Paragraph para = new Paragraph();
            para.Name = "temp3";
            para.Inlines.Add(new Bold(new Run("Template 3.")));
            para.Inlines.Add(new LineBreak());
            para.Inlines.Add("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean Condimentum, orci eu placerat interdum, odio lacus faucibus ex, et viverra justo sem nec augue.");
            flowDoc.Blocks.Add(para);
            paraThreeAdded = true;
        }
        else
        {
            var myPara = flowDoc.Blocks.FirstOrDefault(p => p.Name == "temp3");
            if (myPara != null)
            {
                flowDoc.Blocks.Remove(myPara);
                paraThreeAdded = false;
            }
        }

    }

    private void Button_Click_4(object sender, RoutedEventArgs e)
    {
        if (!paraFourAdded)
        {
            Paragraph para = new Paragraph();
            para.Name = "temp4";
            para.Inlines.Add(new Bold(new Run("Template 4.")));
            para.Inlines.Add(new LineBreak());
            para.Inlines.Add("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean Condimentum, orci eu placerat interdum, odio lacus faucibus ex, et viverra justo sem nec augue.");
            flowDoc.Blocks.Add(para);
            paraFourAdded = true;
        }
        else
        {
            var myPara = flowDoc.Blocks.FirstOrDefault(p => p.Name == "temp4");
            if (myPara != null)
            {
                flowDoc.Blocks.Remove(myPara);
                paraFourAdded = false;
            }
        }

    }
}

我只是切换VisibilityRichTextBox

我已修改代码,以便您现在可以删除添加的模板。我希望这会有所帮助。

【讨论】:

  • 我想从FlowDocumentRichTextBox 中删除(移除)1 个整个模板。例如,如果我单击 Button(TEMPLET4),则将 2 个段落添加到 RichTextBox。当我再次单击Button(TEMPLET4) 时,应删除添加的 2 段(完全删除)。我只使用了 1 个RichTextBox,添加到其中的模板是Paragraphs
  • 代码很少重复,但我相信您可以优化解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2014-05-28
  • 2020-03-01
  • 1970-01-01
相关资源
最近更新 更多