winform的RichTextBox控件追加文本及图片(实现笔记录入和笔记搜索功能)

      在工作中,在工作中,难免有一些笔记要记录下来,方便后续工作中快速找到。之前用的是共享文档来记录的,但有一个缺点就是随着写的内容越来越多,打开变得很慢,搜索更加慢,网络不好的时候,几分钟都没找到自己想要的内容。所以很久之前自己就利用winform写了一个实现笔记录入和笔记查询的功能的程序,自己在工作中也用了一年多。但有个很明显的缺点就是不能录入图片。很久之前就了解到winform的RichTextBox控件就可以录入富文本,像word一样。趁着今天有空,就把这个坑给补上,先看一下最终的效果:

测试环境:

vistual  studio  2017

.net framework  4.6.1

SQLite数据库(本地数据库,无需安装,拷贝过去即可使用,实现存储数据及搜索功能)

本文不打算写这个笔记编辑器是怎么实现的,本文的目标如下:

1  获取RichTextBox的内容,并转化为字符串(方便后续保存到数据库中)

2  从数据库中查询出多条笔记内容,并同时显示到一个RichTextBox控件上

一   获取RichTextBox的内容并转化为字符串存储

这就利用到RichTextBox的SaveFile方法

 public static string GetRichTextBoxContext(RichTextBox richTextBox)
 {
     MemoryStream ms = new MemoryStream();
     ms.Position = 0;
     //把当前的richtextbox内容包括图片和文本保存到流中  
     richTextBox.SaveFile(ms, RichTextBoxStreamType.RichText);
     byte[] buffer = ms.GetBuffer();
     ms.Close();
     return Encoding.UTF8.GetString(buffer);
  }

二  获取多条笔记信息并同时显示到一个RichTextBox上

由于每一条笔记信息都同时包含有文字及图片,所以利用到RichTextBox的追加文本功能及追加图片的功能。

2.1  把一条笔记的内容转化为MemoryStream供RichTextBox使用

 public  MemoryStream ConvertByteArrayToStrem(string richTextBoxContext)
 {
    byte[] richTextBuffer = Encoding.UTF8.GetBytes(richTextBoxContext);
    MemoryStream ms = new MemoryStream();
    ms.Position = 0;
    ms.Write(richTextBuffer, 0, richTextBuffer.Length);
    ms.Position = 0;
    return ms;
 }

2.2 把内容展示到RichTextBox上

WorkQueryDataModel实体代码如下:

public class WorkQueryDataModel
{
        /// <summary>
        /// 主键Id
        /// </summary>
        public int Id;
        /// <summary>
        /// 关键字
        /// </summary>
        public string keyWord;
        /// <summary>
        /// 内容
        /// </summary>
        public string content;

        /// <summary>
        /// 查询次数
        /// </summary>
        public int queryNumber;
}

展示的内容如下:

 private void ShowContext(WorkQueryDataModel[]contextArray)
 {
            if (contextArray == null || contextArray.Length == 0) return;
            foreach (var item in contextArray)
            {
                this.rtInput.AppendText("\r\n关键词:\r\n" + "   " + item.keyWord + "(匹配次数:" + item.queryNumber + ")" + " 主键Id(" + item.Id + ")" + "\r\n");
                if (item.content != null && item.content.Length > 0)
                {
 
                    MemoryStream richTextStream = null;
                    try
                    {
                        richTextStream = ConvertByteArrayToStrem(item.content);
                        RichTextBox richTextBox = new RichTextBox();
                        richTextBox.LoadFile(richTextStream, RichTextBoxStreamType.RichText);
                        richTextStream.Close();
                        this.rtInput.SelectedRtf = richTextBox.Rtf;
                    }
                    catch (Exception ex)
                    {
                        this.rtInput.AppendText("\r\n详细错误信息:\r\n" + "   " + ex.Message+ex.StackTrace + "\r\n\r\n\r\n");
                        if (richTextStream != null)
                        {
                            richTextStream.Close();
                        }
                    }
                }

            }
 }

上述代码中的rtInput是RichTextBox控件

追加文本使用了RichText的AppendText方法,用于显示这个笔记内容的匹配次数等信息

最加一个笔记的富文本,先new了一个空的RichTextBox(richTextBox),然后把文本加载进MemoryStream,new出来的richTextBox通过LoadFile方法把内容加载进RichTextBox控件,最后通过目标RichText(rtInput)的SelectedRtf属性值 this.rtInput.SelectedRtf = richTextBox.Rtf完成富文本的追加工作。

好了,本文到此结束。

笔记编辑器的源码(写得有点Low,勿喷):

https://download.csdn.net/download/zxy13826134783/87858774

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxy2847225301

测试使用

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值