c# RichTextBox 富文本编辑控件

介绍

在 C# 的 Windows Forms 中,RichTextBox 是一个功能强大的文本编辑控件,支持富文本格式(如字体、颜色、段落样式等),比普通的 TextBox 具有更多格式化功能。

以下是 RichTextBox 的常见用法示例:

注意

当内容超过5万时,可能会卡顿

基本操作(设置和获取文本)

// 设置文本
richTextBox1.Text = "这是普通文本";

// 设置富文本(带格式)
richTextBox1.Rtf = @"{\rtf1\ansi\deff0{\colortbl;\red0\green0\blue0;\red255\green0\blue0;}
这是\b 粗体\b0 文本,这是\cf2 红色\cf0 文本}";

// 获取纯文本
string plainText = richTextBox1.Text;

// 获取RTF格式文本
string rtfText = richTextBox1.Rtf;

文本格式化

// 选择部分文本并设置格式
richTextBox1.Select(5, 3); // 从索引5开始选择3个字符
richTextBox1.SelectionFont = new Font("微软雅黑", 12, FontStyle.Bold | FontStyle.Italic);
richTextBox1.SelectionColor = Color.Red;
richTextBox1.SelectionBackColor = Color.Yellow;

// 插入新行
richTextBox1.AppendText(Environment.NewLine);

// 插入带格式的文本
richTextBox1.SelectionStart = richTextBox1.TextLength;
richTextBox1.SelectionFont = new Font("宋体", 10);
richTextBox1.SelectionColor = Color.Blue;
richTextBox1.AppendText("新插入的蓝色文本");

加载和保存文件

// 加载RTF文件
private void LoadRtfFile(string filePath)
{
    if (File.Exists(filePath))
    {
        richTextBox1.LoadFile(filePath, RichTextBoxStreamType.RichText);
    }
}

// 保存为RTF文件
private void SaveRtfFile(string filePath)
{
    richTextBox1.SaveFile(filePath, RichTextBoxStreamType.RichText);
}

// 加载纯文本文件
private void LoadTextFile(string filePath)
{
    if (File.Exists(filePath))
    {
        richTextBox1.LoadFile(filePath, RichTextBoxStreamType.PlainText);
    }
}

常用属性

  • Multiline:是否支持多行文本(默认 true)
  • ScrollBars:滚动条样式(None/Horizontal/Vertical/Both)
  • ReadOnly:是否只读
  • WordWrap:是否自动换行,如果要显示水平滚动条,必须设置为 false

显示水平滚动条

ScrollBars设置为:both
WordWrap设置为:false

常用方法

  • Clear():清空内容
  • Copy()/Cut()/Paste():剪贴板操作
  • Find(string):查找文本
  • SelectAll():全选文本

定位

定位到顶部

确保控件已经布局完成,在执行显示到左上角,该方法最通用,对于只有一行的内容也生效

// 确保控件已经布局完成,在执行显示到左上角
previewRichTextBox.BeginInvoke(new Action(() =>
{
    // 通过发送消息,显示到左上角(该方法最通用,对于只有一行的内容也生效)
    System.Drawing.Point pos = new System.Drawing.Point(0, 0);
    SendMessage(previewRichTextBox.Handle, EM_SETSCROLLPOS, IntPtr.Zero, ref pos);
}));

下面方式不推荐,只显示一行时,下面方法不生效,会显示到该行的行尾:

// 将光标移动到文本开头
previewRichTextBox.SelectionStart = 0;
// 不选择任何文本
previewRichTextBox.SelectionLength = 0;
// 滚动到光标位置(顶部)
previewRichTextBox.ScrollToCaret();

事件

常用事件包括:

  • TextChanged:文本内容改变时触发
  • SelectionChanged:选中文本改变时触发
  • LinkClicked:点击文本中的链接时触发(需设置 DetectUrls = true)

示例:

private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
{
    System.Diagnostics.Process.Start(e.LinkText); // 打开链接
}

RichTextBox 适合用于需要文本格式化的场景,如简易编辑器、日志显示、文档查看器等。根据需求,你可以灵活运用其格式控制功能来实现丰富的文本展示效果。