C#重写RichBox控件获取RTF格式的内容

最近做了一个能记笔记的小工具,记笔记则需要一个富文本编辑框,于是就手动写了一个富文本编辑框,设置字体、插入图片这些功能都没问题,最后需要保存编辑好的文本内容时就遇到问题了,本来想放弃的,但用Html做的编辑器实在不好用,于是就想办法获取RichBox的rtf格式内容。RichBox本身没的直接获取RTF格式内容的属性,我于是就采用的属性的get和set方式来操作RTF内容。主要代码如下:

    [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public string RTFText {
      get {
        using (MemoryStream ms1 = new MemoryStream()) {
          rtbDoc.SaveFile(ms1, RichTextBoxStreamType.RichText);

          byte[] buf = ms1.ToArray();
          string str = Encoding.Default.GetString(buf);
          ms1.Close();
          ms1.Dispose();
          return str;
        }
      }
      set {
        using (MemoryStream ms1 = new MemoryStream()) {
          byte[] buf = Encoding.Default.GetBytes(value);
          ms1.Write(buf, 0, buf.Length);
          ms1.Seek(0, SeekOrigin.Begin);
          rtbDoc.LoadFile(ms1, RichTextBoxStreamType.RichText);
          ms1.Close();
          ms1.Dispose();
        }
      }
    }

 

完整代码如下:
 

using System;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace RichTextBoxEx {
  public partial class RichTextBoxEx : UserControl {
    public RichTextBoxEx() {
      InitializeComponent();


    }

    [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    protected RichTextBox RTBox {
      get { return rtbDoc; }
    }
    [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public string RTFText {
      get {
        using (MemoryStream ms1 = new MemoryStream()) {
          rtbDoc.SaveFile(ms1, RichTextBoxStreamType.RichText);

          byte[] buf = ms1.ToArray();
          string str = Encoding.Default.GetString(buf);
          ms1.Close();
          ms1.Dispose();
          return str;
        }
      }
      set {
        using (MemoryStream ms1 = new MemoryStream()) {
          byte[] buf = Encoding.Default.GetBytes(value);
          ms1.Write(buf, 0, buf.Length);
          ms1.Seek(0, SeekOrigin.Begin);
          rtbDoc.LoadFile(ms1, RichTextBoxStreamType.RichText);
          ms1.Close();
          ms1.Dispose();
        }
      }
    }
    [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public new string Text {
      get {
        return rtbDoc.Text;
      }
      set {
        rtbDoc.Text = value;
      }
    }
    private void SelectFontToolStripMenuItem_Click(object sender, System.EventArgs e) {
      try {
        if (!(rtbDoc.SelectionFont == null)) {
          FontDialog1.Font = rtbDoc.SelectionFont;
        } else {
          FontDialog1.Font = null;
        }
        FontDialog1.ShowApply = true;
        if (FontDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
          rtbDoc.SelectionFont = FontDialog1.Font;
        }
      } catch (Exception ex) {
        MessageBox.Show(ex.Message.ToString(), "Error");
      }
    }

    private void FontColorToolStripMenuItem_Click(object sender, System.EventArgs e) {
      try {
        ColorDialog1.Color = rtbDoc.ForeColor;
        if (ColorDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
          rtbDoc.SelectionColor = ColorDialog1.Color;
        }
      } catch (Exception ex) {
        MessageBox.Show(ex.Message.ToString(), "Error");
      }

    }
    private void BoldToolStripMenuItem_Click(object sender, System.EventArgs e) {
      try {
        if (!(rtbDoc.SelectionFont == null)) {
          System.Drawing.Font currentFont = rtbDoc.SelectionFont;
          System.Drawing.FontStyle newFontStyle;

          newFontStyle = rtbDoc.SelectionFont.Style ^ FontStyle.Bold;

          rtbDoc.SelectionFont = new Font(currentFont.FontFamily, currentFont.Size, newFontStyle);

        }
      } catch (Exception ex) {
        MessageBox.Show(ex.Message.ToString(), "Error");
      }
    }
    private void ItalicToolStripMenuItem_Click(object sender, System.EventArgs e) {
      try {
        if (!(rtbDoc.SelectionFont == null)) {
          System.Drawing.Font currentFont = rtbDoc.SelectionFont;
          System.Drawing.FontStyle newFontStyle;

          newFontStyle = rtbDoc.SelectionFont.Style ^ FontStyle.Italic;

          rtbDoc.SelectionFont = new Font(currentFont.FontFamily, currentFont.Size, newFontStyle);
        }
      } catch (Exception ex) {
        MessageBox.Show(ex.Message.ToString(), "Error");
      }
    }
    private void UnderlineToolStripMenuItem_Click(object sender, System.EventArgs e) {
      try {
        if (!(rtbDoc.SelectionFont == null)) {
          System.Drawing.Font currentFont = rtbDoc.SelectionFont;
          System.Drawing.FontStyle newFontStyle;

          newFontStyle = rtbDoc.SelectionFont.Style ^ FontStyle.Underline;

          rtbDoc.SelectionFont = new Font(currentFont.FontFamily, currentFont.Size, newFontStyle);
        }
      } catch (Exception ex) {
        MessageBox.Show(ex.Message.ToString(), "Error");
      }
    }

    private void tbrFont_Click(object sender, System.EventArgs e) {
      SelectFontToolStripMenuItem_Click(this, e);
    }


    private void tspColor_Click(object sender, EventArgs e) {
      FontColorToolStripMenuItem_Click(this, new EventArgs());
    }

    private void tbrLeft_Click(object sender, System.EventArgs e) {
      rtbDoc.SelectionAlignment = HorizontalAlignment.Left;
    }

    private void tbrCenter_Click(object sender, System.EventArgs e) {
      rtbDoc.SelectionAlignment = HorizontalAlignment.Center;
    }


    private void tbrRight_Click(object sender, System.EventArgs e) {
      rtbDoc.SelectionAlignment = HorizontalAlignment.Right;
    }

    private void tbrBold_Click(object sender, System.EventArgs e) {
      BoldToolStripMenuItem_Click(this, e);
    }
    private void tbrItalic_Click(object sender, System.EventArgs e) {
      ItalicToolStripMenuItem_Click(this, e);
    }
    private void tbrUnderline_Click(object sender, System.EventArgs e) {
      UnderlineToolStripMenuItem_Click(this, e);
    }

    private void tbrFind_Click(object sender, System.EventArgs e) {
      frmTextEditerFind f = new frmTextEditerFind(rtbDoc);
      f.Show();
    }

    private void tbrInsertImg_Click(object sender, EventArgs e) {
      try {
        OpenFileDialog1.Title = "RTE - Insert Image File";
        OpenFileDialog1.DefaultExt = "rtf";
        OpenFileDialog1.Filter = "PNG Files|*.png|JPEG Files|*.jpg|GIF Files|*.gif|Bitmap Files|*.bmp";
        OpenFileDialog1.FilterIndex = 1;
        if (OpenFileDialog1.ShowDialog() == DialogResult.OK) {
          if (OpenFileDialog1.FileName == "") {
            return;
          }
          string strImagePath = OpenFileDialog1.FileName;
          Image img;
          img = Image.FromFile(strImagePath);
          Clipboard.SetDataObject(img);
          DataFormats.Format df;
          df = DataFormats.GetFormat(DataFormats.Bitmap);
          if (this.rtbDoc.CanPaste(df)) {
            this.rtbDoc.Paste(df);
          }
        }
      } catch {
        MessageBox.Show("Unable to insert image format selected.", "RTE - Paste", MessageBoxButtons.OK, MessageBoxIcon.Error);
      }
    }


  }
}
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值