最近弄得一个小软件,需要用到富文本编辑器,richtextbox,一开始以为是和文本框一样的用法,但是实践起来碰壁之后才知道并不简单。

richtextbox 类似于Word,是一个可编辑的控件。结构图(来自网络)

我的主要用途是用来支持一个基于C#的考试系统,由于考试科目涉及到图片以及还有复杂的数学公式,所以,传统的textbox控件是不能同时支持图片和文字以及rtf格式的类型的,而richtextbox恰好可以支持。

难点1、 添加试题,将带有格式的文本输入进richtextbox,并存到数据库中。
二进制

这种带格式的文本内容是不能直接存到数据库中的,所以必须将其内容进行转换,转换成数据库支持的格式,首先就是想到了二进制,经过实践,通过将其内容转换成二进制文件是可以保存到数据库中的,但是存在一个问题,就是程序运行时,将带有图片的文本内容存到数据库中后,本次运行的过程中是可以读取出来的,但是关闭程序后, 再次运行,就会出现路径错误的错误。

base64String

经过一番探索,发现可以将其内容转换成base64String的格式,然后在存到数据库就可以实现自由存取。所以创建了以下的方法,用来将richtextbox中的内容转换成数据库可存储的格式

using System.IO;
//将富文本控件的内容转换成string类型
public string GetTextByRichBox(RichTextBox box)
{
  //创建一个流
  MemoryStream s = new MemoryStream();
  //获得富文本中的内容
  TextRange documentTextRange = new TextRange(box.Document.ContentStart, box.Document.ContentEnd);
  //将富文本中的内容转换成xaml的格式,并保存到指定的流中
  documentTextRange.Save(s, DataFormats.XamlPackage);
  //将流中的内容转换成字节数组,并转换成base64的等效格式
  return Convert.ToBase64String(s.ToArray());
}
将数据库中的数据转换回richtextbox可是别的内容的方法如下:

/// <summary>
/// 将数据库中的内容转换回richtextbox可识别的内容
/// </summary>
/// <param name="data">数据库取出的数据</param>
/// <param name="box">接收的richtextbox控件名称</param>
public void ShowTextToRichBox(string data,RichTextBox box)
{
  MemoryStream s = new MemoryStream((Convert.FromBase64String(Convert.ToString(data))));
  TextRange TR = new TextRange(box.Document.ContentStart, box.Document.ContentEnd);
  TR.Load(s, DataFormats.XamlPackage);
}
————————————————
版权声明:本文为CSDN博主「LLLDa_&amp;」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Ming_5257/article/details/90144316

最新文章

  1. ES6中Arguments和Parameters用法解析
  2. Java学习-042-获取目录文件列表(当前,级联)
  3. Windows 7 下配置IIS,并且局域网内可访问
  4. soliworks三维机柜布局(二)创建设备位置
  5. C语言 小游戏之贪吃蛇
  6. java.lang.NullPointerException错误分析
  7. Python 入门介绍
  8. dialog使用方法(同一页面,调用一个js代码,实现多个不同样式的弹窗)
  9. ionic tab页面跳转
  10. java重构四则运算
  11. 报文分析4、TCP协议的头结构
  12. springboot引入AOP
  13. 给div&quot;上&quot;滑动条
  14. 2.4G和5G的Wi-Fi各自优缺点对比
  15. 【进阶1-5期】JavaScript深入之4类常见内存泄漏及如何避免(转)
  16. 周鸿祎IOT发布会思考
  17. redis集群创建
  18. java的acm输入输出格式+大数语法
  19. datatable to entiy list 不支持可空类型和枚举类型
  20. jsp页面错误的全局处理

热门文章

  1. C语言:float表示范围
  2. 一个很多人不知道的SpringBoot小技能!!
  3. 深入理解JavaScript中的继承
  4. mysql - 按条件统计
  5. 【Uva1025 A Spy in the Metro】动态规划
  6. Python基础之用PyQt5界面代码分离以及自定义一个槽函数
  7. Python基础之读取ini文件
  8. 算法优化---素数(质数)(Java版)
  9. js 跨域请求失败
  10. java中 字符串的构造方法和直接创建