最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#?RichTextBox制作文本編輯器

 更新時(shí)間:2017年04月11日 16:32:26   作者:飛翔的月亮  
這篇文章主要為大家詳細(xì)介紹了C#?RichTextBox制作文本編輯器的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

Windows窗體中的RichTextBox控件用于顯示,輸入和操作格式化的文本,RichTextBox除了擁有TextBox控件的所有功能外,還可以顯示字體,顏色,鏈接,從文件中讀取和加載圖像,以及查找指定的字符。RichTextBox控件通常用于提供類(lèi)似字體處理程序(如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)容開(kā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è)值,通過(guò)該值指示項(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)的格式】:

核心代碼如下

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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#使用SQL DataAdapter數(shù)據(jù)適配代碼實(shí)例

    C#使用SQL DataAdapter數(shù)據(jù)適配代碼實(shí)例

    今天小編就為大家分享一篇關(guān)于C#使用SQL DataAdapter數(shù)據(jù)適配代碼實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • C#難點(diǎn)逐個(gè)擊破(3):params數(shù)組參數(shù)

    C#難點(diǎn)逐個(gè)擊破(3):params數(shù)組參數(shù)

    注意,這里的paras全稱(chēng)是array parameter,也就是數(shù)組參數(shù)。 paras類(lèi)型參數(shù)主要用于在對(duì)數(shù)組長(zhǎng)度未知(可變)的情況下進(jìn)行函數(shù)聲明。
    2010-02-02
  • 基于C#方法重載的總結(jié)詳解

    基于C#方法重載的總結(jié)詳解

    本篇文章是對(duì)C#中方法重載進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#使用OpenCvSharp實(shí)現(xiàn)圖像校正

    C#使用OpenCvSharp實(shí)現(xiàn)圖像校正

    這篇文章主要為大家詳細(xì)介紹了C#如何使用OpenCvSharp實(shí)現(xiàn)圖像校正功能,文中的示例代碼簡(jiǎn)潔易懂,具有一定的學(xué)習(xí)價(jià)值,需要的小伙伴可以參考下
    2023-11-11
  • C++調(diào)用C#的DLL程序?qū)崿F(xiàn)方法

    C++調(diào)用C#的DLL程序?qū)崿F(xiàn)方法

    本文通過(guò)例子,講述了C++調(diào)用C#的DLL程序的方法,作出了以下總結(jié),具有一定的參考價(jià)值,下面就讓我們一起來(lái)學(xué)習(xí)吧
    2015-10-10
  • C#備份文件夾的兩種方法

    C#備份文件夾的兩種方法

    在C#編程中,文件夾操作是不可或缺的一部分,它允許開(kāi)發(fā)者創(chuàng)建、刪除、移動(dòng)和管理文件系統(tǒng)中的目錄結(jié)構(gòu),本文給大家介紹了C#備份文件夾的兩種方法,需要的朋友可以參考下
    2024-12-12
  • C#中函數(shù)的創(chuàng)建和閉包的理解

    C#中函數(shù)的創(chuàng)建和閉包的理解

    這篇文章主要介紹了C#中函數(shù)的創(chuàng)建和閉包的理解,本文講解了動(dòng)態(tài)創(chuàng)建函數(shù)、匿名函數(shù)不足之處、理解c#中的閉包、閉包的優(yōu)點(diǎn)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 基于C#實(shí)現(xiàn)哈夫曼樹(shù)算法

    基于C#實(shí)現(xiàn)哈夫曼樹(shù)算法

    哈夫曼樹(shù)又稱(chēng)最優(yōu)二叉樹(shù),也就是帶權(quán)路徑最短的樹(shù),對(duì)于哈夫曼樹(shù),我想大家對(duì)它是非常的熟悉,使用下面我們就來(lái)學(xué)習(xí)一下如何通過(guò)C#實(shí)現(xiàn)哈夫曼樹(shù)算法吧
    2023-11-11
  • C#延遲執(zhí)行方法函數(shù)實(shí)例講解

    C#延遲執(zhí)行方法函數(shù)實(shí)例講解

    這篇文章主要介紹了C#延遲執(zhí)行方法函數(shù)實(shí)例講解,這是比較常用的函數(shù),有需要的同學(xué)可以研究下
    2021-03-03
  • C#讀取計(jì)算機(jī)CPU及HDD信息的方法

    C#讀取計(jì)算機(jī)CPU及HDD信息的方法

    這篇文章主要介紹了C#讀取計(jì)算機(jī)CPU及HDD信息的方法,涉及C#讀取計(jì)算機(jī)CPU及硬盤(pán)信息的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07

最新評(píng)論

沂源县| 恩平市| 永德县| 阿巴嘎旗| 平安县| 永州市| 弥勒县| 永胜县| 日照市| 克东县| 荃湾区| 蒙山县| 虎林市| 剑川县| 长兴县| 工布江达县| 来宾市| 宜兰县| 平度市| 宁南县| 漳州市| 石屏县| 湘西| 分宜县| 青海省| 师宗县| 克什克腾旗| 公安县| 毕节市| 民乐县| 乌拉特前旗| 荣昌县| 岑巩县| 凌海市| 永新县| 厦门市| 扶绥县| 电白县| 常宁市| 师宗县| 从化市|