如何在Winfrom RichTextBox中实现图文并存

2024-05-09 10:59:40 浏览数 (1)

基于C/S 的Winfrom 已经没怎么接触了,最近想搞一个类似QQ的简单内部沟通程序,于是就重新用Winfrom着手搭建。在搭建的时候遇到一个问题就是除了要在文本框(RichTextBox)输入文字外,还想插入图片。那怎么办呢?后来查询得知,原来文本框是支持Rtf格式。Rtf是富文本格式,支持文件和图片那就OK了,怎么处理呢?其实就是通过粘贴到文本框。

代码语言:txt复制
 openFileDialog1.Filter = "bmp文件(*.bmp)|*.bmp|jpg文件(*.jpg)|*.jpg|ico文件(*.ico)|*.ico";
 openFileDialog1.Title = "打开图片";
 openFileDialog1.FilterIndex = 2;
 if (openFileDialog1.ShowDialog() == DialogResult.OK)
 {
     Bitmap bmp = new Bitmap(openFileDialog1.FileName);
     Clipboard.SetDataObject(bmp, false);
     if (uiRichTextBox1.CanPaste(DataFormats.GetFormat(DataFormats.Bitmap)))
         uiRichTextBox1.Paste();
 }

简单说明一下该代码吧,首先是通过文件框让用户选择相关的图片,将图片复制到粘贴板。再判断粘贴板的是否能粘贴,可以的就粘贴。这样就简单解决了文本框的图片粘贴。接下来就是到如何保存了。。

代码语言:txt复制
     StringBuilder sb = new StringBuilder();
     byte[] bytes = Encoding.Default.GetBytes(uiRichTextBox1.Rtf);
     foreach (byte b in bytes)
     {
         sb.Append(b   "|");
     }     

先通过StringBuilder 构建一个字符串容器,然后通过Encoding.Default.GetBytes将文本框的内容转为字节,然后每个字节通过“|”划分,保存到字符串容器,最后一个保存写库即可。感觉可以增加个压缩功能,但这个后面需要再处理。既然保存了,怎么显示的呢?好吧。。

代码语言:txt复制
  string[] strs = sb.ToString().Trim().Split('|');
  int length = strs.Length; 
  for (int i = 0; i < length; i  )
  {
      if (strs[i].Trim().Length > 0)
      {
          bytes[i] = Convert.ToByte(strs[i]);
      }
  }
  if (bytes != null)
  {    
      uiRichTextBox2.Rtf = Encoding.Default.GetString(bytes);
  }

这里就不多说了。。最后还要注意一个地方就是RichTextBox的控件一开始不能只读,只能写入后通过ReadOnly进行控制。

0 人点赞