Editor based on RichTextBox : RichTextBox « GUI Windows Forms « C# / CSharp Tutorial






Editor based on RichTextBox
using System;
using System.Drawing;
using System.Windows.Forms;
using System.IO;

public class RichTextBoxes : Form
{
  RichTextBox rtxt;

  public RichTextBoxes()
  {
    Size = new Size(400, 500);
               
    rtxt = new RichTextBox();
    rtxt.Parent = this;
    rtxt.Text = "Enter text here.";
    rtxt.Multiline = true;
    rtxt.BorderStyle = BorderStyle.Fixed3D;
    rtxt.ScrollBars = RichTextBoxScrollBars.ForcedBoth;  
    rtxt.Dock = DockStyle.Fill;
    rtxt.DetectUrls = true;       
    rtxt.AutoWordSelection = true;  
    rtxt.BulletIndent = 10;
    rtxt.ShowSelectionMargin = true;

    MenuItem mnuImport = new MenuItem("&Import",new EventHandler(mnuImport_Click));
    MenuItem mnuFile = new MenuItem("&File",new MenuItem[] {mnuImport});

    MenuItem mnuDash1 = new MenuItem("-");
    MenuItem mnuDash2 = new MenuItem("-");
    MenuItem mnuUndo = new MenuItem("&Undo",new EventHandler(mnuUndo_Click),Shortcut.CtrlZ);
    MenuItem mnuCut = new MenuItem("Cu&t",  new EventHandler(mnuCut_Click),  Shortcut.CtrlX);
    MenuItem mnuCopy = new MenuItem("&Copy",new EventHandler(mnuCopy_Click),Shortcut.CtrlC);
    MenuItem mnuCopyRtf = new MenuItem("Copy &Rtf",  new EventHandler(mnuCopyRtf_Click));
    MenuItem mnuPaste = new MenuItem("&Paste",new EventHandler(mnuPaste_Click),Shortcut.CtrlV);
    MenuItem mnuDelete = new MenuItem("&Delete",new EventHandler(mnuDelete_Click));
    MenuItem mnuSelectAll = new MenuItem("Select &All",  new EventHandler(mnuSelectAll_Click),Shortcut.CtrlA);
    MenuItem mnuSelect5 = new MenuItem("Select First &5",new EventHandler(mnuSelect5_Click),Shortcut.Ctrl5);
    MenuItem mnuClear = new MenuItem("Clea&r",new EventHandler(mnuClear_Click));
    MenuItem mnuEdit = new MenuItem("&Edit",new MenuItem[] {mnuUndo, mnuDash1, 
                    mnuCut, mnuCopy, mnuCopyRtf, mnuPaste, 
                    mnuDelete, mnuDash2, mnuSelectAll, 
                    mnuSelect5, mnuClear});

    MenuItem mnuScrollToCaret = new MenuItem("&Scroll to Caret",new EventHandler(mnuScrollToCaret_Click));
    MenuItem mnuView = new MenuItem("&View",new MenuItem[] {mnuScrollToCaret});
    
    MenuItem mnuAlignLeft = new MenuItem("Align&Left",new EventHandler(mnuAlignLeft_Click));
    MenuItem mnuAlignRight = new MenuItem("Align&Right",new EventHandler(mnuAlignRight_Click));
    MenuItem mnuAlignCenter = new MenuItem("Align&Center",new EventHandler(mnuAlignCenter_Click));

    MenuItem mnuBullet = new MenuItem("&Bullet",new EventHandler(mnuBullet_Click));
    MenuItem mnuAlign = new MenuItem("&Align",new MenuItem[] {mnuAlignLeft, mnuAlignRight, mnuAlignCenter});
    MenuItem mnuRed = new MenuItem("&Red",new EventHandler(mnuRed_Click));
    MenuItem mnuBold = new MenuItem("Bo&ld",new EventHandler(mnuBold_Click));
    MenuItem mnuHang = new MenuItem("&Hanging Indent",new EventHandler(mnuHang_Click));
    MenuItem mnuIndent = new MenuItem("&Indent",new EventHandler(mnuIndent_Click));
    MenuItem mnuRightIndent = new MenuItem("&Right Indent",  new EventHandler(mnuRightIndent_Click));
    MenuItem mnuFormat = new MenuItem("For&mat",new MenuItem[] {mnuBullet, mnuAlign, 
                    mnuRed, mnuBold, mnuHang, mnuIndent, 
                    mnuRightIndent});

    Menu = new MainMenu(new MenuItem[] {mnuFile, mnuEdit, 
                    mnuView, mnuFormat});

  }
  static void Main() 
  {
    Application.Run(new RichTextBoxes());
  }

  private void mnuImport_Click(object sender, EventArgs e)
  {
    OpenFileDialog ofd = new OpenFileDialog();
    ofd.InitialDirectory = @"c:\";
    ofd.Filter = "RTF files (*.rtf)|*.rtf|" +
                 "All files (*.*)|*.*";
    ofd.FilterIndex = 1;              //  1 based index
    
    if (ofd.ShowDialog() == DialogResult.OK)
    {
      try
      {
        StreamReader reader = new StreamReader(ofd.FileName);
        rtxt.Rtf = reader.ReadToEnd();
        reader.Close();
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message);
        return;
      }
    }
  }

  private void mnuUndo_Click(object sender, EventArgs e)
  {
    if (rtxt.CanUndo == true)
    {
      rtxt.Undo();
      rtxt.ClearUndo();
    }
  }

  private void mnuCut_Click(object sender, EventArgs e)
  {
    if (rtxt.SelectedText != "")
      rtxt.Cut();
  }

  private void mnuCopy_Click(object sender, EventArgs e)
  {
    if (rtxt.SelectionLength > 0)
      rtxt.Copy();
  }

  private void mnuCopyRtf_Click(object sender, EventArgs e)
  {
    if (rtxt.SelectionLength > 0)
    {
      Clipboard.SetDataObject(rtxt.SelectedRtf);
    }
  }

  private void mnuPaste_Click(object sender, EventArgs e)
  {
    if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text) == true)
    {
      if (rtxt.CanUndo == true)
      {
        if (rtxt.SelectionLength > 0)
        {
          if (MessageBox.Show(
            "Do you want to overwrite the currently selected text?", 
            "Cut & Paste", MessageBoxButtons.YesNo) == DialogResult.No)
            rtxt.SelectionStart = rtxt.SelectionStart + 
                                  rtxt.SelectionLength;
        }
        rtxt.Paste();
      }
    }
  }

  private void mnuDelete_Click(object sender, EventArgs e)
  {
    if (rtxt.SelectionLength > 0)
      rtxt.SelectedText = "";
  }

  private void mnuClear_Click(object sender, EventArgs e)
  {
    rtxt.Clear();
  }


  private void mnuSelect5_Click(object sender, EventArgs e)
  {
    if (rtxt.Text.Length >= 5)
    {
      rtxt.Select(0,5);
    }
    else
    {
      rtxt.Select(0,rtxt.Text.Length);
    }
  }

  private void mnuSelectAll_Click(object sender, EventArgs e)
  {
    rtxt.SelectAll();
  }

  private void mnuScrollToCaret_Click(object sender, EventArgs e)
  {
    rtxt.ScrollToCaret();
  }

  private void mnuBullet_Click(object sender, EventArgs e)
  {
    rtxt.SelectionBullet = !rtxt.SelectionBullet;
  }

  private void mnuAlignLeft_Click(object sender, EventArgs e)
  {
    rtxt.SelectionAlignment = HorizontalAlignment.Left;
  }

  private void mnuAlignRight_Click(object sender, EventArgs e)
  {
    rtxt.SelectionAlignment = HorizontalAlignment.Right;
  }

  private void mnuAlignCenter_Click(object sender, EventArgs e)
  {
    rtxt.SelectionAlignment = HorizontalAlignment.Center;
  }

  private void mnuRed_Click(object sender, EventArgs e)
  {
    if (rtxt.SelectionColor == Color.Red)
      rtxt.SelectionColor = Color.Black;
    else
      rtxt.SelectionColor = Color.Red;
  }

  private void mnuBold_Click(object sender, EventArgs e)
  {
    if (rtxt.SelectionFont.Bold )
      rtxt.SelectionFont = new Font(rtxt.SelectionFont, FontStyle.Regular);
    else
      rtxt.SelectionFont = new Font(rtxt.SelectionFont, FontStyle.Bold);
  }

  private void mnuHang_Click(object sender, EventArgs e)
  {
    if (rtxt.SelectionHangingIndent == 10 )
      rtxt.SelectionHangingIndent = 0;
    else
      rtxt.SelectionHangingIndent = 10;
  }

  private void mnuIndent_Click(object sender, EventArgs e)
  {
    if (rtxt.SelectionIndent == 10 )
      rtxt.SelectionIndent = 0;
    else
      rtxt.SelectionIndent = 10;
  }

  private void mnuRightIndent_Click(object sender, EventArgs e)
  {
    if (rtxt.SelectionRightIndent == 50 )
      rtxt.SelectionRightIndent = 0;
    else
      rtxt.SelectionRightIndent = 50;
  }
}








23.20.RichTextBox
23.20.1.LoadFile SaveFile
23.20.2.RichTextBox: font
23.20.3.Editor based on RichTextBoxEditor based on RichTextBox
23.20.4.Build Menu for a RichTextBox editorBuild Menu for a RichTextBox editor
23.20.5.RichTextBox based Text Editor