首页 > 其他分享 >Winform RichTextBox 获取Text文本中段落及区块

Winform RichTextBox 获取Text文本中段落及区块

时间:2024-06-24 10:21:22浏览次数:24  
标签:Font SelectionFont Text RichTextBox richTextBox1 startIndex 文本 Winform

在C# WinForms应用程序中,RichTextBox控件是一个功能强大的文本编辑控件,支持多种文本格式。如果你需要获取RichTextBox中每一部分的文本,包括段落和不同样式的区块,可以通过以下步骤实现。

总体思路是使用RichTextBoxRichTextBox.Find以及RichTextBox.SelectionStartRichTextBox.SelectionLength来逐个查找和获取不同样式的文本块。以下是一个完整的示例代码,演示了如何进行这些操作。

示例代码

using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace RichTextBoxExample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            // 初始化RichTextBox及其内容
            InitializeRichTextBox();
            // 获取RichTextBox中的所有文本块
            GetRichTextBlocks();
        }

        private void InitializeRichTextBox()
        {
            richTextBox1.AppendText("This is a regular text paragraph.\n");
            richTextBox1.AppendText("This is another regular text paragraph.\n");

            // 以不同的样式添加文本
            richTextBox1.SelectionFont = new Font(richTextBox1.Font, FontStyle.Bold);
            richTextBox1.AppendText("This is a bold text paragraph.\n");

            richTextBox1.SelectionFont = new Font(richTextBox1.Font, FontStyle.Italic);
            richTextBox1.AppendText("This is an italic text paragraph.\n");

            richTextBox1.SelectionFont = new Font(richTextBox1.Font, FontStyle.Underline);
            richTextBox1.AppendText("This is an underline text paragraph.\n");

            richTextBox1.SelectionFont = new Font(richTextBox1.Font, FontStyle.Regular);
            richTextBox1.AppendText("Back to regular text.\n");
        }

        private void GetRichTextBlocks()
        {
            StringBuilder sb = new StringBuilder();

            int textLength = richTextBox1.TextLength;
            int startIndex = 0;

            while (startIndex < textLength)
            {
                // 获取当前文本块的样式信息
                richTextBox1.Select(startIndex, 1);
                FontStyle currentStyle = richTextBox1.SelectionFont.Style;
                int blockStartIndex = startIndex;

                // 查找相同样式的文本块结束位置
                while (startIndex < textLength)
                {
                    richTextBox1.Select(startIndex, 1);
                    if (richTextBox1.SelectionFont.Style != currentStyle)
                    {
                        break;
                    }
                    startIndex++;
                }

                // 提取文本块
                int blockLength = startIndex - blockStartIndex;
                richTextBox1.Select(blockStartIndex, blockLength);
                string blockText = richTextBox1.SelectedText;

                // 打印或处理文本块
                sb.AppendLine($"Text Block: \"{blockText}\", Style: {currentStyle}");

                // 查找段落末尾,以换行符为标志
                if (blockText.Contains("\n"))
                {
                    int paragraphEnd = blockText.IndexOf("\n") + blockStartIndex + 1;
                    startIndex = paragraphEnd;
                }
            }

            // 显示所有文本块信息
            MessageBox.Show(sb.ToString());
        }
    }
}

代码解释

  1. 初始化RichTextBox

    • InitializeRichTextBox方法用于向RichTextBox中添加不同样式的文本。
    • 可以看到,使用richTextBox1.SelectionFont来设置不同的样式,然后使用richTextBox1.AppendText添加带不同样式的文本段落。
  2. 获取并处理文本块

    • GetRichTextBlocks方法用于逐个提取RichTextBox中的文本块。
    • 它使用一个循环,通过richTextBox1.SelectrichTextBox1.SelectionFont.Style来判断当前文本块的样式。
    • 找到同样式的连续文本块之后,通过richTextBox1.SelectedText来提取文本内容。
    • 检查这些文本块是否包含换行符,以便区分段落。
  3. 显示结果

    • 将所有提取的文本块及其样式信息通过StringBuilder收集,并最终使用MessageBox.Show展示。

通过这种方法,你可以提取并处理RichTextBox中的每个文本块,包括段落和不同样式的区块。如果需要进一步处理,例如保存到文件或其他数据结构,可以根据需要进行扩展。

标签:Font,SelectionFont,Text,RichTextBox,richTextBox1,startIndex,文本,Winform
From: https://www.cnblogs.com/dyanblog/p/18264464

相关文章

  • C# WinForm给ToolStrip工具栏扩展一个CheckBox单选框类型按钮的方法
    [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip)]publicpartialclassToolStripCheckBox:ToolStripItem{privateboolIsChecked=false;publicboolHasChecked{get......
  • Java处理PDF文档【上】( 全新 iText 8.0 基础入门 、元素)
    一:iText简介iText是一个开源的Java库,用于处理PDF文档的创建、修改和呈现。它提供了一系列功能强大的API,使开发人员能够在他们的应用程序中轻松地操作PDF文件。它是由一家名为iTextGroupNV的公司开发和维护的,总部位于比利时。该公司专注于PDF技术,并致力于提供高......
  • HttpContext扩展类
    需要引入UAParser,IPTools.Core类库a1publicstaticpartialclassHttpContextExtension2{3///<summary>4///是否是ajax请求5///</summary>6///<paramname="request"></param>7///<returns&......
  • 【报错】IllegalStateException: The remote endpoint was in state [TEXT_FULL_WRITI
    一、报错内容java.lang.IllegalStateException:Theremoteendpointwasinstate[TEXT_FULL_WRITING]whichisaninvalidstateforcalledmethod atorg.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1234) a......
  • C# Winform 开源UI库
        WinForms,作为微软.NET框架下的一个桌面应用程序开发工具,自1999年首次亮相以来,已经走过了二十多年的发展历程。它以其简单直观的拖拽式界面设计和丰富的控件库,成为了大众喜爱的入门学习编程工具。由于它是比较基础的开发工具,在UI上并没有做太多优化,所以设置出来的界......
  • SpringBoot 项目启动后监听器执行操作:ContextRefreshEvent
    一Springboot运行时,会依次发送以下事件1. ApplicationStartingEvent 2. ApplicationEnvironmentPreparedEvent:当Environment已经准备好,在context创建前3. ApplicationContextInitializedEvent:在ApplicationContext创建和ApplicationContextInitializer都被调用后,但是......
  • 基于C#的winform和halcon开发的通用视觉框架,类似visionpro
    基于C#的winform和halcon开发的通用视觉框架界面风格和visionpro的很像,线条连线的流程风格,代码编译无报错,程序可运行,工具不是很完善,适合大家学习使用。需要源码请私信或者加QQ......
  • 基于C#的winform和halcon开发的通用视觉框架
    基于C#的winform和halcon开发的通用视觉框架代码编译无报错,程序可运行,有些地方有BUG,适合大家学习使用。需要源码请私信或者加QQ......
  • 用友Ufida ELTextFile-任意文件读取漏洞
      0x01阅读须知        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使......
  • Cannot generate SSPI context
         1.分析  1)获取服务器的SPN    a)通过SQLCheck.exe(需要到微软官网进行下载)    b)通过setspn工具  2)判断SPN是否正确,如果不正确则需要矫正SPN    a)如果好的连接找不到任何SPN则会使用NLTM    b)如果好的连接能找到......