国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C# > 正文

C# RichTextBox制作文本編輯器

2019-10-29 21:11:42
字體:
供稿:網(wǎng)友

本文利用一個(gè)簡(jiǎn)單的小例子【文本編輯器】,講解RichTextBox的用法。

Windows窗體中的RichTextBox控件用于顯示,輸入和操作格式化的文本,RichTextBox除了擁有TextBox控件的所有功能外,還可以顯示字體,顏色,鏈接,從文件中讀取和加載圖像,以及查找指定的字符。RichTextBox控件通常用于提供類似字體處理程序(如Microsoft Word)的文本操作和顯示功能。RichTextBox控件可以顯示滾動(dòng)條,且默認(rèn)根據(jù)需要進(jìn)行顯示。

涉及知識(shí)點(diǎn):

  • SelectionFont 獲取或設(shè)置當(dāng)前選定文本或插入點(diǎn)的字體。
  • FontStyle 指定應(yīng)用到文本的字形信息。
  • SelectionAlignment  獲取或設(shè)置應(yīng)用到當(dāng)前選定內(nèi)容或插入點(diǎn)的對(duì)齊方式。
  • SelectionIndent 獲取或設(shè)置所選內(nèi)容開始行的縮進(jìn)距離(以像素為單位)。
  • SelectionCharOffset 獲取或設(shè)置控件中的文本是顯示在基線上、作為上標(biāo)還是作為基線下方的下標(biāo)。
  • SelectionColor 獲取或設(shè)置當(dāng)前選定文本或插入點(diǎn)的文本顏色。
  • SelectionBackColor   獲取或設(shè)置在 System.Windows.Forms.RichTextBox 控件中選中文本時(shí)文本的顏色。
  • SelectionBullet 獲取或設(shè)置一個(gè)值,通過該值指示項(xiàng)目符號(hào)樣式是否應(yīng)用到當(dāng)前選定內(nèi)容或插入點(diǎn)。
  • Clipboard Paste 粘貼指定剪貼板格式的剪貼板內(nèi)容【插入圖片時(shí)使用】。
  • Find 在對(duì)搜索應(yīng)用特定選項(xiàng)的情況下,在 System.Windows.Forms.RichTextBox 控件的文本中搜索位于控件內(nèi)特定位置的字符串。

效果圖如下【以下設(shè)置文本對(duì)應(yīng)的格式】:

C#,RichTextBox,文本編輯器

核心代碼如下

using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Printing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace DemoRichText.Model{ public class DefaultRickFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {  } } /// <summary> /// 加粗格式 /// </summary> public class BoldRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   Font oldFont = rtbInfo.SelectionFont;   Font newFont;   if (oldFont.Bold)   {    newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Bold);//支持位于運(yùn)算   }   else   {    newFont = new Font(oldFont, oldFont.Style | FontStyle.Bold);   }   rtbInfo.SelectionFont = newFont;  } } /// <summary> /// 斜體 /// </summary> public class ItalicRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   Font oldFont = rtbInfo.SelectionFont;   Font newFont;   if (oldFont.Italic)   {    newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Italic);   }   else   {    newFont = new Font(oldFont, oldFont.Style | FontStyle.Italic);   }   rtbInfo.SelectionFont = newFont;   rtbInfo.Focus();  } } /// <summary> /// 下劃線 /// </summary> public class UnderLineRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   Font oldFont = rtbInfo.SelectionFont;   Font newFont;   if (oldFont.Underline)   {    newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Underline);   }   else   {    newFont = new Font(oldFont, oldFont.Style | FontStyle.Underline);   }   rtbInfo.SelectionFont = newFont;   rtbInfo.Focus();  } } /// <summary> /// 刪除線 /// </summary> public class StrikeLineRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   Font oldFont = rtbInfo.SelectionFont;   Font newFont;   if (oldFont.Underline)   {    newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Strikeout);   }   else   {    newFont = new Font(oldFont, oldFont.Style | FontStyle.Strikeout);   }   rtbInfo.SelectionFont = newFont;   rtbInfo.Focus();  } } /// <summary> /// 左對(duì)齊 /// </summary> public class LeftRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   rtbInfo.SelectionAlignment = HorizontalAlignment.Left;   rtbInfo.Focus();  } } /// <summary> /// 居中對(duì)齊 /// </summary> public class CenterRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   if (rtbInfo.SelectionAlignment == HorizontalAlignment.Center)   {    rtbInfo.SelectionAlignment = HorizontalAlignment.Left;   }   else   {    rtbInfo.SelectionAlignment = HorizontalAlignment.Center;   }   rtbInfo.Focus();  } } /// <summary> /// 右對(duì)齊 /// </summary> public class RightRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   if (rtbInfo.SelectionAlignment == HorizontalAlignment.Right)   {    rtbInfo.SelectionAlignment = HorizontalAlignment.Left;   }   else   {    rtbInfo.SelectionAlignment = HorizontalAlignment.Right;   }   rtbInfo.Focus();  } } /// <summary> /// 縮進(jìn)對(duì)齊 /// </summary> public class IndentRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   //每次以10個(gè)像素進(jìn)行縮進(jìn)   rtbInfo.SelectionIndent = rtbInfo.SelectionIndent + 10;   rtbInfo.Focus();  } } /// <summary> /// 縮進(jìn)對(duì)齊 /// </summary> public class OutIndentRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   //每次以10個(gè)像素進(jìn)行縮進(jìn)   rtbInfo.SelectionIndent = rtbInfo.SelectionIndent - 10;   rtbInfo.Focus();  } } /// <summary> /// 下標(biāo) /// </summary> public class SubScriptRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   if (rtbInfo.SelectionCharOffset < 0)   {    rtbInfo.SelectionCharOffset = 0;   }   else {    rtbInfo.SelectionCharOffset = -5;   }   rtbInfo.Focus();  } } /// <summary> /// 上標(biāo) /// </summary> public class SuperScriptRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   if (rtbInfo.SelectionCharOffset > 0)   {    rtbInfo.SelectionCharOffset = 0;   }   else {    rtbInfo.SelectionCharOffset = 5;   }   rtbInfo.Focus();  } } /// <summary> /// 字體 /// </summary> public class FontRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   FontDialog f = new FontDialog();   if (f.ShowDialog() == DialogResult.OK)   {    FontFamily family = f.Font.FontFamily;    rtbInfo.SelectionFont = new Font(family, rtbInfo.SelectionFont.Size, rtbInfo.SelectionFont.Style);   }   rtbInfo.Focus();  } } /// <summary> /// 文本顏色 /// </summary> public class ForeColorRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   ColorDialog f = new ColorDialog();   if (f.ShowDialog() == DialogResult.OK)   {    rtbInfo.SelectionColor = f.Color;   }   rtbInfo.Focus();  } } /// <summary> /// 文本背景顏色 /// </summary> public class BgColorRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   ColorDialog f = new ColorDialog();   if (f.ShowDialog() == DialogResult.OK)   {    rtbInfo.SelectionBackColor = f.Color;   }   rtbInfo.Focus();  } } /// <summary> /// UL列表,項(xiàng)目符號(hào)樣式 /// </summary> public class UlRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   if (rtbInfo.SelectionBullet)   {    rtbInfo.SelectionBullet = false;   }   else {    rtbInfo.SelectionBullet = true;    rtbInfo.BulletIndent = 10;   }   rtbInfo.Focus();  } } /// <summary> /// 圖片插入 /// </summary> public class PicRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   OpenFileDialog o = new OpenFileDialog();   o.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;   o.Title = "請(qǐng)選擇圖片";   o.Filter = "jpeg|*.jpeg|jpg|*.jpg|png|*.png|gif|*.gif";    if (o.ShowDialog() == DialogResult.OK) {    string fileName = o.FileName;    try    {     Image bmp = Image.FromFile(fileName);     Clipboard.SetDataObject(bmp);     DataFormats.Format dataFormat = DataFormats.GetFormat(DataFormats.Bitmap);     if (rtbInfo.CanPaste(dataFormat))     {      rtbInfo.Paste(dataFormat);     }          }    catch (Exception exc)    {     MessageBox.Show("圖片插入失敗。" + exc.Message, "提示",         MessageBoxButtons.OK, MessageBoxIcon.Information);    }   }   rtbInfo.Focus();  } } /// <summary> /// 刪除 /// </summary> public class DelRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   rtbInfo.SelectedText = "";   rtbInfo.Focus();  } } /// <summary> /// 查找 /// </summary> public class SearchRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   string find = rtbInfo.Tag.ToString();   int index= rtbInfo.Find(find, 0,RichTextBoxFinds.None);   int startPos = index;   int nextIndex = 0;   while (nextIndex != startPos)//循環(huán)查找字符串,并用藍(lán)色加粗12號(hào)Times New Roman標(biāo)記之    {    rtbInfo.SelectionStart = index;    rtbInfo.SelectionLength = find.Length;    rtbInfo.SelectionColor = Color.Blue;    rtbInfo.SelectionFont = new Font("Times New Roman", (float)12, FontStyle.Bold);    rtbInfo.Focus();    nextIndex = rtbInfo.Find(find, index + find.Length, RichTextBoxFinds.None);    if (nextIndex == -1)//若查到文件末尾,則充值nextIndex為初始位置的值,使其達(dá)到初始位置,順利結(jié)束循環(huán),否則會(huì)有異常。     {     nextIndex = startPos;    }    index = nextIndex;   }   rtbInfo.Focus();  } } /// <summary> /// 打印 /// </summary> public class PrintRichFormat : BaseRichFormat {  private RichTextBox richTextbox;  public override void SetFormat(RichTextBox rtbInfo)  {   this.richTextbox = rtbInfo;   PrintDocument pd = new PrintDocument();   pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);   // 打印文檔   pd.Print();  }  private void pd_PrintPage(object sender, PrintPageEventArgs ev)  {   //ev.Graphics.DrawString(richTextbox.Text);   //ev.HasMorePages = true;  } } /// <summary> /// 字體大小 /// </summary> public class FontSizeRichFormat : BaseRichFormat {  public override void SetFormat(RichTextBox rtbInfo)  {   string fontSize = rtbInfo.Tag.ToString();   float fsize = 0.0f;   if (float.TryParse(fontSize, out fsize)) {    rtbInfo.SelectionFont = new Font(rtbInfo.Font.FontFamily, fsize, rtbInfo.SelectionFont.Style);   }   rtbInfo.Focus();  } }} 

頁(yè)面代碼【由于實(shí)現(xiàn)了代碼封裝,所有頁(yè)面代碼較少】

using DemoRichText.Model;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace DemoRichText{ public partial class MainForm : Form {  public MainForm()  {   InitializeComponent();  }    public void btnButtonClick(object sender, EventArgs e) {   Button btn = (Button)sender;   BTNType btnType;   if (Enum.TryParse<BTNType>(btn.Tag.ToString(), out btnType)) {    if (btnType == BTNType.Search) {     if (!string.IsNullOrEmpty(this.txtSearch.Text.Trim()))     {      this.rtbInfo.Tag = this.txtSearch.Text.Trim();     }     else {      return;     }         }    IRichFormat richFomat = RichFormatFactory.CreateRichFormat(btnType);    richFomat.SetFormat(this.rtbInfo);   }  }  private void combFontSize_SelectedIndexChanged(object sender, EventArgs e)  {   float fsize = 12.0f;   if (combFontSize.SelectedIndex > -1) {    if (float.TryParse(combFontSize.SelectedItem.ToString(), out fsize)) {     rtbInfo.Tag = fsize.ToString();     IRichFormat richFomat = RichFormatFactory.CreateRichFormat(BTNType.FontSize);     richFomat.SetFormat(this.rtbInfo);    }    return;   }  } }}

RichTextBox是一個(gè)功能豐富的控件,值得學(xué)習(xí)。

點(diǎn)擊文末原文地址下載源碼。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到c#教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南靖县| 都安| 民勤县| 元朗区| 积石山| SHOW| 淮阳县| 光泽县| 仁化县| 八宿县| 大理市| 海淀区| 玉龙| 沂源县| 广元市| 山东省| 北宁市| 平舆县| 抚宁县| 仪陇县| 会泽县| 永仁县| 噶尔县| 曲沃县| 梁平县| 通州市| 长兴县| 南平市| 闻喜县| 彭泽县| 潜山县| 瓦房店市| 芮城县| 宁陕县| 阳信县| 多伦县| 广昌县| 莱阳市| 义乌市| 五河县| 启东市|