在工作中,在工作中,难免有一些笔记要记录下来,方便后续工作中快速找到。之前用的是共享文档来记录的,但有一个缺点就是随着写的内容越来越多,打开变得很慢,搜索更加慢,网络不好的时候,几分钟都没找到自己想要的内容。所以很久之前自己就利用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