C# RichTextBox制作文本編輯器
本文利用一個簡單的小例子【文本編輯器】,講解RichTextBox的用法。
Windows窗體中的RichTextBox控件用于顯示,輸入和操作格式化的文本,RichTextBox除了擁有TextBox控件的所有功能外,還可以顯示字體,顏色,鏈接,從文件中讀取和加載圖像,以及查找指定的字符。RichTextBox控件通常用于提供類似字體處理程序(如Microsoft Word)的文本操作和顯示功能。RichTextBox控件可以顯示滾動條,且默認(rèn)根據(jù)需要進(jìn)行顯示。
涉及知識點(diǎn):
- SelectionFont 獲取或設(shè)置當(dāng)前選定文本或插入點(diǎn)的字體。
- FontStyle 指定應(yīng)用到文本的字形信息。
- SelectionAlignment 獲取或設(shè)置應(yīng)用到當(dāng)前選定內(nèi)容或插入點(diǎn)的對齊方式。
- SelectionIndent 獲取或設(shè)置所選內(nèi)容開始行的縮進(jìn)距離(以像素為單位)。
- SelectionCharOffset 獲取或設(shè)置控件中的文本是顯示在基線上、作為上標(biāo)還是作為基線下方的下標(biāo)。
- SelectionColor 獲取或設(shè)置當(dāng)前選定文本或插入點(diǎn)的文本顏色。
- SelectionBackColor 獲取或設(shè)置在 System.Windows.Forms.RichTextBox 控件中選中文本時文本的顏色。
- SelectionBullet 獲取或設(shè)置一個值,通過該值指示項目符號樣式是否應(yīng)用到當(dāng)前選定內(nèi)容或插入點(diǎn)。
- Clipboard Paste 粘貼指定剪貼板格式的剪貼板內(nèi)容【插入圖片時使用】。
- Find 在對搜索應(yīng)用特定選項的情況下,在 System.Windows.Forms.RichTextBox 控件的文本中搜索位于控件內(nèi)特定位置的字符串。
效果圖如下【以下設(shè)置文本對應(yīng)的格式】:
核心代碼如下
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> /// 左對齊 /// </summary> public class LeftRichFormat : BaseRichFormat { public override void SetFormat(RichTextBox rtbInfo) { rtbInfo.SelectionAlignment = HorizontalAlignment.Left; rtbInfo.Focus(); } } /// <summary> /// 居中對齊 /// </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> /// 右對齊 /// </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)對齊 /// </summary> public class IndentRichFormat : BaseRichFormat { public override void SetFormat(RichTextBox rtbInfo) { //每次以10個像素進(jìn)行縮進(jìn) rtbInfo.SelectionIndent = rtbInfo.SelectionIndent + 10; rtbInfo.Focus(); } } /// <summary> /// 縮進(jìn)對齊 /// </summary> public class OutIndentRichFormat : BaseRichFormat { public override void SetFormat(RichTextBox rtbInfo) { //每次以10個像素進(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列表,項目符號樣式 /// </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 = "請選擇圖片"; 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號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),否則會有異常。 { 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(); } } }
頁面代碼【由于實現(xiàn)了代碼封裝,所有頁面代碼較少】
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是一個功能豐富的控件,值得學(xué)習(xí)。
點(diǎn)擊文末原文地址下載源碼。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
您可能感興趣的文章
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#通過Semaphore類控制線程隊列的方法
- 01-10winform 實現(xiàn)控制輸入法
- 01-10C#實現(xiàn)控制攝像頭的類
- 01-10C#禁止textbox復(fù)制、粘貼、剪切及鼠標(biāo)右鍵的方法
- 01-10winform實現(xiàn)限制及解除鼠標(biāo)移動范圍的方法
- 01-10C#實現(xiàn)基于加減按鈕形式控制系統(tǒng)音量及靜音的方法
- 01-10C#繪制曲線圖的方法
- 01-10C#中深度復(fù)制和淺度復(fù)制詳解


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻播放器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實例總結(jié)
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置