怎么在RichTextBox中插入图片,网上广为流传的方法是,通过剪贴板粘贴的方法,代码如下:
openFileDialog1.Filter = "图片文件|*.jpg|*.bmp|*.png|所有文件|*.*";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Clipboard.SetDataObject(Image.FromFile(openFileDialog1.FileName), false);
this.RichTextBox.Paste();
}
不过,用剪切粘贴实现图片插入显然是偷巧之作,显得别扭还不够灵活。
其实RichTextBox本身处理的是RTF,只要能按照RTF格式的要求对图片文字进行处理,就可以简单的实现图文并茂。何况已经有处理的很好的控件,比如ExRichTextBox
ExRichTextBox实现文本图片的插入,但没有提供链接的支持,尝试添加以下代码:
StringBuilder sb = new StringBuilder();
sb.Append(RTF_HEADER);
sb.Append(@"{\fonttbl{\f0\fnil\fcharset" + Font.GdiCharSet.ToString() + " " + EncodeAnsi(this.Font.Name) + ";}}");
sb.Append(@"\f0\fs" + (int)Math.Round((2 * Font.SizeInPoints)));
sb.Append("{\\field{\\*\\fldinst{HYPERLINK \"");
sb.Append(link.Href);
sb.Append("\" }}{\\fldrslt{\\cf2\\ul ");
sb.Append(EncodeAnsi(link.Value));
sb.Append("}}}");
AppendRtf(sb.ToString());
RTF_HEADER是ExRichTextBox定义的,内容是\rtf1\ansi\ansicpg1252\deff0\deflang,含意大概是说,rft版本1.0,默认编码ansi,codepage英文,使用缺省语言。
之后是设置字体字号,其中fcharset设置很重要,如果设错就会导致中文乱码,这里使用的是控件默认的charset。此外,字号也需要特别指定的,否则使用的默认字体会和其他有所区别。
链接包括URL和标签两部分,标准的写法如上,其中在标签地方特别设置\\ul,即该处需要下划线,以便使效果网页类似,当然这里还可以设置颜色。
不过有趣的是,在RichTextBox中,似乎无法显示类似网页链接那样的效果,RichTextBox会自动转换成“标签<URL>”的形式,稍显怪异,目前还不知道是设置的问题抑或RichTextBox本身支持的问题,但同样的RTF串在WordPad中则显示正常。
此外,由于在RTF中直接书写中文容易导致乱码,记得吗?RTF头中默认是ansi编码,不过貌似改成unicode也不行,应该是格式的问题。所以特别做了一个转换函数,EncodeAnsi,代码如下:
public string EncodeAnsi(string str)
{
var sb = new StringBuilder();
byte[] bs = System.Text.Encoding.Default.GetBytes(str);
foreach (byte b in bs)
{
if (b <= 0x7f)
sb.Append((char)b);
else
sb.Append("\\'" + b.ToString("X"));
}
return sb.ToString();
}
最后,如果想点击链接的时候触发事件,设置RichTextBox的DetectUrl属性,接收LinkClicked事件就可以了
转自书剑生活
分享到:
相关推荐
WPF+RichTextBox实现富文本编辑器,主要实现主要实现复制,剪切,粘贴,撤销,重做,保存,打开,文本加粗,斜体,下划线,删除线,左对齐,居中对齐,右对齐,两端对齐,缩进,减少缩进,项目符号,数字符号,上标...
在本文中,我们将深入探讨如何使用C#编程语言和Richtextbox控件来实现一个类似于Notepad的简单文本编辑器。Richtextbox是Windows Forms应用程序中常见的一种控件,它提供了比普通TextBox更多的文本格式化功能,如...
这个压缩包“RichTextBox实现多个关键字自定义颜色显示(C#版和VB.NET版).rar”提供了两种编程语言(C#和VB.NET)的解决方案,帮助开发者实现这一需求。 首先,我们要理解`RichTextBox`的基本操作。`RichTextBox`...
本教程将深入探讨如何利用`RichtextBox`实现一个简单的文档编辑器,包括字数扫描以及记录最近打开的文档。 **RichtextBox控件基础** `RichtextBox`是.NET Framework中的`System.Windows.Forms`命名空间下的一个...
WinForm+RichTextBox实现文本编辑器 开发工具:VisualStudio2022 开发语言:C# 程序类型:WinForm 主要实现功能:加粗,斜体,下划线,前景色,背景色,左对齐,右对齐,居中对齐,缩进,项目符号,数字符号,打印,...
本教程将详细讲解如何利用`RichtextBox`来实现一个类似记事本的应用,以及如何实现新页面的创建和页面之间的切换操作。 首先,`RichtextBox`控件支持多种文本样式,如字体、大小、颜色、加粗、斜体等,还支持插入...
本文将深入探讨如何利用`RichTextBox`实现虚拟换页以及进行文字处理,包括行扫描、字符扫描、字符操作和查找替换等功能。 ### 虚拟换页 虚拟换页是一种优化大量文本显示的技术,它并不实际创建所有页面,而是只在...
为了在`RichTextBox`中实现动态GIF显示,我们需要采用一些额外的技术和策略。以下将详细介绍如何实现这一功能。 首先,理解`RichTextBox`的基本限制是必要的。`RichTextBox`控件主要设计用来处理文本,而不是图形...
描述中提到的“wpf原生richtextbox支持文字上标下标”,可能是指开发者通过某种方式实现了这一特性,例如使用`FlowDocument`和`Run`元素,或者使用`XAML`标记来实现。 在WPF中,我们通常会用`FlowDocument`作为`...
本篇文章将详细探讨如何利用`RichtextBox`实现简单的文档编辑功能,包括打开文档、复制、粘贴、剪切、换行、更改字体以及获取当前输入的字数和行数。 首先,我们需要了解`RichtextBox`的基本属性和方法。`...
在本文中,我们将深入探讨如何使用`richtextbox`控件来实现一个简单的写字板程序。这个程序基于多文档界面(MDI)的概念,允许用户创建、编辑和保存多个文本文件。`richtextbox`控件是Windows Forms应用程序中常用的...
这可以通过控件的ID或者在窗体的构造函数中声明并初始化它来实现。 ```csharp private RichTextBox richTextBox1; public Form1() { InitializeComponent(); richTextBox1 = this.richTextBox1; // 假设...
本文将详细讲解如何在C#的WinForms环境中,利用RichTextBox控件实现关键字高亮显示。 首先,我们需要了解`RichTextBox`的基本操作。`RichTextBox`控件提供了丰富的文本格式化功能,包括字体、颜色、样式等设置。在...
本文将详细介绍如何在 RichTextBox 控件中实现超链接功能,使得用户可以通过点击这些超链接直接访问对应的网站。 #### 一、准备工作 在开始之前,确保您的项目中已经包含了 Windows Forms 的引用。如果你是在 ...
在C#编程中,我们可以借助一些技巧来实现`RichTextBox`的背景图片功能。 首先,我们需要了解`RichTextBox`控件的基本属性和方法。`RichTextBox`主要由以下部分组成: 1. **Text**:存储或获取控件中的文本。 2. **...
本篇文章将详细解释如何在VB.NET中利用`RichTextBox`实现上下标的显示。 首先,我们要明白上下标是通过特定的文本格式化代码来实现的。在`RichTextBox`中,我们可以使用RTF(Rich Text Format)语言来控制文本的...
最后,提供的压缩包文件"RichTextBoxDemo"可能包含一个演示项目,该项目展示了如何在C#应用程序中实现上述功能。你可以下载并运行这个示例来直观地了解和学习在`RichTextBox`中生成表格的过程。
给visual basic6里面的richtextbox控件增加撤消重做的功能,请大家下载吧。
本文将深入探讨如何在C# WinForm应用中实现`RichTextBox`的自动完成功能。 首先,我们需要理解自动完成的基本原理。它基于用户输入的前缀,提供可能的匹配项列表,帮助用户快速输入完整词汇或语句。对于`...
总的来说,`C#161演示将图片和文字混合显示在RichTextBox控件中`的源代码为我们提供了一个很好的学习案例,教我们如何利用RTF格式和Base64编码在`RichTextBox`中实现图文混排,这对于开发具有更丰富用户体验的应用...