附件:https://files.cnblogs.com/xe2011/CSHARP_RichTextBoxEditor.rar

 完整的转到这里 http://www.cnblogs.com/xe2011/p/3449333.html

C# richTextBox编辑器

C# richTextBox编辑器

 

主要的类

 

  1 using System;
  2 //using System.Collections.Generic;
  3 //using System.Linq;
  4 using System.Text;
  5 using System.Drawing;
  6 //using System.Windows.Forms;
  7 using System.Runtime.InteropServices;
  8 using System.Drawing.Printing;
  9 using System.ComponentModel;
 10 using System.IO;
 11 using RichTextBoxCtrl;
 12 using richTextBoxTableClass;
 13  
 14 #region 添加引用 说明
 15 //右键选中 引用 添加引用
 16 //在“添加引用”对话框中,
 17 //双击“System.Drawing.dll”和
 18 //“System.Windows.Forms.dll”,然后单击“确定”。
 19 #endregion
 20 
 21 
 22 namespace System.Windows.Forms
 23 {
 24     public class RichTextBoxCtrl : RichTextBox
 25     {
 26 
 27         #region RichTextBox初始化属性
 28         /// <summary>
 29         /// richTextBox1 = this;
 30         /// </summary>
 31         private System.Windows.Forms.RichTextBox richTextBox1;
 32 
 33         public RichTextBoxCtrl()
 34         {
 35             richTextBox1 = this;
 36             AllowDrop = true;
 37             EnableAutoDragDrop = true;
 38             AcceptsTab = true;
 39             HideSelection = false;
 40             ScrollBars = RichTextBoxScrollBars.Vertical;
 41             InitialRichTextBoxCtrl();
 42             
 43         }
 44         #endregion
 45 
 46         #region RichTextBox 新建 打开 和 保存 文件对话框
 47 
 48         private string fileName = "未命名.rtf";
 49         private string absFileName = "";
 50 
 51         //文件名 返回 如 abc.rtf  
 52         public string FileName
 53         {
 54             get{
 55                 return fileName;
 56             }
 57         }
 58 
 59         //格式 C:\windows\abc.rtf
 60         public string AbsFileName
 61         {
 62             get {
 63                 return absFileName;
 64             }
 65         }
 66         
 67 
 68         /// <summary>
 69         /// 判断文件是否保存了
 70         /// </summary>
 71         private void CheckFileSave()
 72         {
 73             if (this.Modified)
 74             {
 75                 string msg = "";
 76                 if (File.Exists(absFileName))
 77                     msg = "文档已修改是否保存:" + fileName;
 78                 else
 79                     msg = "文档已修改是否保存";
 80 
 81                 DialogResult Result = MessageBox.Show(msg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
 82                 if (Result == DialogResult.Yes)
 83                 {
 84                     if (File.Exists(absFileName))
 85                         richTextBox1.SaveFile(absFileName);
 86                     else
 87                         this.ShowSaveFileDlg();
 88                 }
 89             }
 90         }
 91 
 92         /// <summary>
 93         /// 新空的文档
 94         /// </summary>
 95         public void NewDocument()
 96         {
 97             CheckFileSave();
 98 
 99             richTextBox1.Text = "";
100             richTextBox1.Modified = false;
101 
102             absFileName = "";
103             fileName = "";
104         }
105 
106         /// <summary>
107         /// 打开文件
108         /// </summary>
109         public void ShowOpenFileDlg()
110         {
111             CheckFileSave();
112 
113             OpenFileDialog openFileDialog1 = new OpenFileDialog();
114             openFileDialog1.DefaultExt = ".rtf";
115             openFileDialog1.Filter = "RTF 文档(*.rtf)|*.rtf|所有文件(*.*)|*.*";
116             if (openFileDialog1.ShowDialog() == DialogResult.OK)
117             {
118                 LoadFile(openFileDialog1.FileName);
119                 Modified = false;
120 
121                 absFileName = openFileDialog1.FileName;
122                 fileName = Path.GetFileName(absFileName);
123             }
124         }
125 
126         //另存文件
127         public void ShowSaveFileDlg()
128         {
129             SaveFileDialog saveFileDialog1 = new SaveFileDialog();
130             saveFileDialog1.DefaultExt = ".rtf";
131             saveFileDialog1.Filter = "RTF 文档(*.rtf)|*.rtf|所有文件(*.*)|*.*";
132             saveFileDialog1.FileName = FileName;
133             if (saveFileDialog1.ShowDialog() == DialogResult.OK)
134             {
135                 SaveFile(saveFileDialog1.FileName);
136                 Modified = false;
137              
138                 absFileName = saveFileDialog1.FileName;
139                 fileName = Path.GetFileName(absFileName);
140             }
141         }
142      
143         #endregion
144 
145         #region 把RTF文件保存为纯文本
146        
147         /// <summary>
148         /// 把RTF文件保存为纯文本
149         /// 只保存字符 转换后文本不包括RTF中的图片信息
150         /// </summary>
151         /// <param name="TextFileName">"C:\Users\Admin\Desktop\CurRoleBase.txt"</param>
152         public void SaveToTextFile(string TextFileName)
153         {
154             this.SaveFile(TextFileName, RichTextBoxStreamType.TextTextOleObjs);
155         }
156         #endregion
157 
158         #region 设置为只读模式
159 
160         [DllImport("user32.dll")]
161         static extern bool HideCaret(IntPtr hWnd);
162        
163        
164         /// <summary>
165         /// HideCaret 
166         /// </summary>
167         /// <param name="m"></param>
168         protected override void WndProc(ref Message m)
169         {
170             base.WndProc(ref m);
171             if (ReadOnly)
172                 HideCaret(Handle);
173         }
174         #endregion
175 
176         #region 设置 和 获得光标所在的行号和列号
177         ///要在本类中初始化 richTextBox1 = this;
178         private int EM_LINEINDEX = 0x00BB;
179         private int EM_LINEFROMCHAR = 0x00C9;
180 
181         [DllImport("user32.dll", EntryPoint = "SendMessage")]
182         public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
183 
184         
185         /// <summary>
186         /// 获得光标所在的行号和列号
187         /// </summary>
188         /// <param name="editControl"></param>
189         /// <returns>p.X = 行号 p.Y =列号</returns>
190         public Point GetCaretPosition()
191         {
192             int charIndex = (int)SendMessage(richTextBox1.Handle, EM_LINEINDEX, -1, 0);
193             int lineIndex = (int)SendMessage(richTextBox1.Handle, EM_LINEFROMCHAR, charIndex, 0);
194             Point pt=new Point();
195             pt.X = richTextBox1.SelectionStart - charIndex +1;//Line
196             pt.Y = lineIndex +1;//Column
197             return pt;
198         }
199 
200 
201         /// <summary>
202         /// 转到行
203         /// </summary>
204         /// <param name="Line">行号</param>
205         public void jumpLine(int Line)
206         {
207             richTextBox1.SelectionStart = SendMessage(richTextBox1.Handle, EM_LINEINDEX, Line - 1, 0);
208             richTextBox1.SelectionLength = 0;
209             richTextBox1.ScrollToCaret();
210         }
211 
212 
213         /// <summary>
214         /// 有问题 同时设置行号和列号就出现问题了
215         /// </summary>
216         /// <param name="Column"></param>
217         public void jumpColumn(int Column)
218         {
219             int Line = Column;
220 
221             int charIndex = (int)SendMessage(richTextBox1.Handle, EM_LINEINDEX, Line - 1, 0);
222             int lineIndex = charIndex + (int)SendMessage(richTextBox1.Handle, EM_LINEFROMCHAR, charIndex, 0);
223 
224             richTextBox1.SelectionStart = lineIndex;
225         }
226         #endregion
227 
228         #region RichTextBox 字体样式
229         //格式刷
230 
231 
232         /// richTextBox1 = this;
233         
234         /// <summary>
235         /// 粗体
236         /// </summary>
237         public void ToggleBold()
238         {
239             if (richTextBox1.SelectionFont == null)
240                 richTextBox1.SelectionFont = richTextBox1.Font;
241 
242             FontStyle style = richTextBox1.SelectionFont.Style;
243 
244             if (richTextBox1.SelectionFont.Bold)
245 
246                 style &= ~FontStyle.Bold;//恢复正常
247             else
248                 style |= FontStyle.Bold;
249 
250             richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, style);
251         }
252 
253         /// <summary>
254         /// 斜体
255         /// </summary>
256         public void ToggleItalic()
257         {
258             if (richTextBox1.SelectionFont == null)
259                 richTextBox1.SelectionFont = richTextBox1.Font;
260 
261             FontStyle style = richTextBox1.SelectionFont.Style;
262 
263             if (richTextBox1.SelectionFont.Italic)
264                 style &= ~FontStyle.Italic;//恢复正常
265             else
266                 style |= FontStyle.Italic;
267 
268             richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, style);
269         }
270 
271         /// <summary>
272         /// 下划线
273         /// </summary>
274         public void ToggleUnderLine()
275         {
276             if (richTextBox1.SelectionFont == null)
277                 richTextBox1.SelectionFont = richTextBox1.Font;
278 
279             FontStyle style = richTextBox1.SelectionFont.Style;
280 
281             if (richTextBox1.SelectionFont.Underline)
282                 style &= ~FontStyle.Underline;//恢复正常
283             else
284                 style |= FontStyle.Underline;
285 
286             richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, style);
287         }
288 
289         /// <summary>
290         /// 删除线
291         /// </summary>
292         public void ToggleStrikeout()
293         {
294             if (richTextBox1.SelectionFont == null)
295                 richTextBox1.SelectionFont = richTextBox1.Font;
296 
297             FontStyle style = richTextBox1.SelectionFont.Style;
298 
299             if (richTextBox1.SelectionFont.Strikeout)
300                 style &= ~FontStyle.Strikeout;//恢复正常
301             else
302                 style |= FontStyle.Strikeout;
303             richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, style);
304         }
305        
306 
307         //标题1 ,标题2....
308         public void SetFontFormat(int index)
309         {
310              richTextBoxFontFormatClass FontFormat1 = new richTextBoxFontFormatClass();
311              FontFormat1.richTextBox = this;
312              FontFormat1.SetFontFormat(index);
313         }
314 
315         public string GetFontFormat()
316         {
317             richTextBoxFontFormatClass FontFormat1 = new richTextBoxFontFormatClass();
318             FontFormat1.richTextBox = this;
319             return FontFormat1.GetFontFormat();
320         }
321 
322         /// <summary>
323         /// 设置上标
324         /// </summary>
325         [Browsable(false)]
326         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
327         public bool SelectionSupperScript
328         {
329             get
330             {
331                 return (SelectionCharOffset == 4);
332             }
333             set
334             {
335                 if (SelectionCharOffset == 0)
336                 {
337                     SelectionCharOffset =  4;
338                 }
339                 else
340                 {
341                     SelectionCharOffset = 0;
342                 }
343             }
344         }
345 
346         /// <summary>
347         /// 设置下标
348         /// </summary>
349         [Browsable(false)]
350         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
351         public bool SelectionSubScript
352         {
353             get
354             {
355                 return (SelectionCharOffset == -4);
356             }
357             set
358             {
359                 if (SelectionCharOffset == 0)
360                 {
361                     SelectionCharOffset = -4;
362                 }
363                 else
364                 {
365                     SelectionCharOffset = 0;
366                 }
367 
368             }
369         }
370  
371 
372         /// <summary>
373         ///RichTextBox  数字序列 1. 2. 3. 4. 5.  ... 
374         /// </summary>
375         [Browsable(false)]
376         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
377         public bool SelectionOrderList
378         {
379             get
380             {
381                 richTextBoxBulletClass r = new richTextBoxBulletClass();
382                 r.richTextBox = this;
383                 return r.SelectionOrderList;
384             }
385             set
386             {
387                 richTextBoxBulletClass r = new richTextBoxBulletClass();
388                 r.richTextBox = this;
389                 r.SelectionOrderList = value;
390             }
391         }
392      
393     
394         //只须设置 不需要获得是否设置的返回值
395         ////Tab->
396         public void Indent()
397         {
398             SelectionIndent += 8;
399         }
400         ////Tab <-
401         public void OutIndent()
402         {
403             SelectionIndent -= 8;
404         }
405 
406         #endregion
407 
408         #region  RichTextBox Margin
409         private struct Rect
410         {
411             public int Left;
412             public int Top;
413             public int Right;
414             public int Bottom;
415         }
416 
417         [DllImport("user32.dll")]
418         private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, ref Rect lParam);
419 
420         private const int EM_GETRECT = 0x00b2;
421         private const int EM_SETRECT = 0x00b3;
422 
423         /// <summary>
424         /// 当没设置的时候结果多出了L T R +2
425         /// </summary>
426         private Rect RichTextBoxMargin
427         {
428             get
429             {
430                 Rect rect = new Rect();
431                 SendMessage(richTextBox1.Handle, EM_GETRECT, IntPtr.Zero, ref rect);
432                 rect.Left += 1;
433                 rect.Top += 1;
434                 rect.Right = 1 + richTextBox1.DisplayRectangle.Width - rect.Right;
435                 rect.Bottom = richTextBox1.DisplayRectangle.Height - rect.Bottom;
436                 return rect;
437             }
438             set
439             {
440                 Rect rect;
441                 rect.Left = richTextBox1.ClientRectangle.Left + value.Left;
442                 rect.Top = richTextBox1.ClientRectangle.Top + value.Top;
443                 rect.Right = richTextBox1.ClientRectangle.Right - value.Right;
444                 rect.Bottom = richTextBox1.ClientRectangle.Bottom - value.Bottom;
445 
446                 SendMessage(richTextBox1.Handle, EM_SETRECT, IntPtr.Zero, ref rect);
447             }
448 
449         }
450 
451         [Browsable(true)]
452         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
453         public int LeftMargin
454         {
455             get
456             {
457                 return RichTextBoxMargin.Left;
458             }
459             set
460             {
461                 Rect rect1;
462                 rect1 = RichTextBoxMargin;
463 
464                 Rect rect;
465                 rect.Left = value;
466                 rect.Top = 0;//rect1.Top;
467                 rect.Right = rect1.Right;
468                 rect.Bottom = rect1.Bottom;
469 
470                 RichTextBoxMargin = rect;
471             }
472         }
473 
474         [Browsable(false)]
475         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
476         public  int RightMargin
477         {
478             get
479             {
480                 return RichTextBoxMargin.Right;
481             }
482             set
483             {
484                 Rect rect1;
485                 rect1 = RichTextBoxMargin;
486 
487                 Rect rect;
488                 rect.Left = rect1.Left;
489                 rect.Top = rect1.Top;
490                 rect.Right = value;
491                 rect.Bottom = rect1.Bottom;
492 
493                 RichTextBoxMargin = rect;
494             }
495         }
496 
497         [Browsable(false)]
498         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
499         public int TopMargin
500         {
501             get
502             {
503                 return RichTextBoxMargin.Top;
504             }
505             set
506             {
507                 Rect rect1;
508                 rect1 = RichTextBoxMargin;
509 
510                 Rect rect;
511                 rect.Left = rect1.Left;
512                 rect.Top = value;
513                 rect.Right = rect1.Right;
514                 rect.Bottom = rect1.Bottom;
515 
516                 RichTextBoxMargin = rect;
517             }
518         }
519         [Browsable(false)]
520         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
521         public int BottomMargin
522         {
523             get
524             {
525                 return RichTextBoxMargin.Bottom;
526             }
527             set
528             {
529                 Rect rect1;
530                 rect1 = RichTextBoxMargin;
531 
532                 Rect rect;
533                 rect.Left = rect1.Left;
534                 rect.Top = rect1.Top;
535                 rect.Right = rect1.Right;
536                 rect.Bottom = value;
537                 RichTextBoxMargin = rect;
538             }
539         }
540 
541 #endregion
542         
543         #region RichTextBox 默认快捷键
544         /*
545             查找    CTRL+F
546             替换    CTRL+R
547             时间日期     F5
548 
549             粗体    CTRL+B
550             斜体    CTRL+I
551             下划线    CTRL+U
552          */
553 
554         protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
555         {
556             if (!this.ReadOnly)
557             {
558                 switch (keyData)
559                 {
560                     //CTRL+B
561                     case Keys.Control | Keys.B:
562                         ToggleBold();
563                         return true;
564 
565                     //CTRL+I
566                     case Keys.Control | Keys.I:
567                         ToggleItalic();
568                         return true;
569 
570                     //CTRL+U
571                     case Keys.Control | Keys.U:
572                         ToggleUnderLine();
573                         return true;
574 
575                     //shift +tab 左缩进
576                     case Keys.Shift | Keys.Tab:
577                         if (SelectedText != "")
578                         {
579                             SelectionIndent -= 8;
580                         }
581                         return true;
582 
583                     //shift +tab 右缩进
584                     case Keys.Tab:
585                         if (SelectedText != "")
586                         {
587                             SelectionIndent += 8;
588                           
589                         }
590                         return true;
591 
592                     //替换对话框
593                     case Keys.Control | Keys.R:
594                         ShowReplaceDlg();
595                         return true;
596 
597                     //插入时间日期
598                     case Keys.F5:
599                         //2013-11-25 13:57:09
600                         SelectedText = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
601                         return true;
602 
603                     //粘贴纯文本
604                     case Keys.Control | Keys.Shift | Keys.V:
605                         PasteAsText();
606                         return true;
607 
608                     case Keys.Control | Keys.G:
609                         ShowGoToDlg();
610                 return true;
611 
612                 }
613             }
614  
615             if (keyData == (Keys.Control | Keys.F))
616             {
617                 ShowFindDlg();
618             }
619             return false;
620         }
621 
622 
623         #endregion
624 
625         #region RichTextBox 常用属性
626 
627         public void PasteAsText()
628         {
629             richTextBox1.SelectedText = Clipboard.GetText(); //粘贴纯文本
630         }
631 
632         public void PasteAsBmp()
633         {
634             if (CanPasteAsBmp())
635             {
636                 richTextBox1.Paste();
637             }
638         }
639 
640         public void  PasteAsHtml()
641         {
642            
643         }
644 
645         public void PasteAsUnicode()
646         {
647 
648         }
649 
650         /// <summary>
651         /// 剪切板是否为空
652         /// </summary>
653         /// <returns></returns>
654         public  bool CanPaste()
655         {
656             return (Clipboard.GetDataObject() != null);
657         }
658 
659         /// <summary>
660         /// 剪切板是否有字符串
661         /// </summary>
662         /// <returns></returns>
663         public bool CanPasteAsText()
664         {
665             return Clipboard.GetDataObject().GetDataPresent(DataFormats.Text); 
666         }
667         /// <summary>
668         /// 剪切板是否有位图
669         /// </summary>
670         /// <returns></returns>
671         public bool CanPasteAsBmp()
672         {
673             return Clipboard.GetDataObject().GetDataPresent(DataFormats.Bitmap); 
674         }
675         /// <summary>
676         /// 剪切板是否HTML
677         /// </summary>
678         /// <returns></returns>
679         public bool CanPasteAsHtml()
680         {
681             return Clipboard.GetDataObject().GetDataPresent(DataFormats.Html); 
682         }
683 
684         /// <summary>
685         /// 是否可以全选
686         /// </summary>
687         /// <returns></returns>
688         public bool CanSelectAll()
689         {
690             return (richTextBox1.SelectedText.Length != richTextBox1.Text.Length);
691         }
692 
693         private void InitialRichTextBoxCtrl()
694         {
695             //ContextMenuStrip = contextMenuStrip1;
696             LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(richTextBox1_LinkClicked); 
697         }
698 
699         /// <summary>
700         /// 自动打开超链接
701         /// </summary>
702         /// <param name="sender"></param>
703         /// <param name="e"></param>
704         private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
705         {
706             DialogResult b = MessageBox.Show("你要打开此链接吗?\n" + e.LinkText, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
707             if (b == DialogResult.Yes)
708             {
709                 System.Diagnostics.Process.Start("iexplore.exe", e.LinkText);
710             }
711         }
712 
713 
714         #endregion
715 
716         #region RichTextBox 通用对话框
717 
718         //private FindDialog FindDlg = new FindDialog();
719         //private ReplaceDialog ReplaceDlg=new ReplaceDialog();
720 
721         /// <summary>
722         /// 查找对话框
723         /// </summary>
724         public void ShowFindDlg()
725         {
726             FindDialog FindDlg = new FindDialog();
727             FindDlg.richTextBox1 = this;
728             FindDlg.textBox1.Text = this.SelectedText;
729             FindDlg.StartPosition = FormStartPosition.CenterParent;
730             FindDlg.ShowDialog();
731         }
732 
733         /// <summary>
734         /// 替换 对话框
735         /// </summary>
736         public void ShowReplaceDlg()
737         {
738             ReplaceDialog ReplaceDlg = new ReplaceDialog();
739             ReplaceDlg.StartPosition = FormStartPosition.CenterParent;
740             ReplaceDlg.richTextBox1 = this;
741             ReplaceDlg.textBox1.Text = this.SelectedText;
742             ReplaceDlg.ShowDialog();
743         }
744 
745         /// <summary>
746         /// 字体对话框
747         /// </summary>
748         public void ShowFontDlg()
749         {
750             FontDialog fontDialog1 = new FontDialog();
751             fontDialog1.Font = richTextBox1.Font;
752             if (fontDialog1.ShowDialog() == DialogResult.OK)
753             {
754                 richTextBox1.Font = fontDialog1.Font;
755 
756             }
757         }
758         /// <summary>
759         /// 转到 对话框
760         /// </summary>
761         public void ShowGoToDlg()
762         {
763             Point pt = this.GetCaretPosition();
764 
765             frm_GOTO frm = new frm_GOTO();
766             frm.label1.Text = "等号(1 - " + this.Lines.Length.ToString() + ")(&L)";         
767             frm.textBox1.Text = pt.X.ToString();
768             if (frm.ShowDialog() == DialogResult.OK)
769             {
770                 int Line = Convert.ToInt32(frm.textBox1.Text);
771                 if (Line >= 1)
772                 {
773                     if (Line > this.Lines.Length+1)
774                     {
775                         MessageBox.Show("行数大于现有的行数");
776                     }
777                     else
778                     {
779                         this.jumpLine(Line);
780                     }
781                 }
782             }
783         }
784 
785         //RichTextBox 插入图片
786         public void ShowInsertImageDlg()
787         {
788             OpenFileDialog OpenFileDialog1 = new OpenFileDialog();
789             OpenFileDialog1.Title = "Select Image";
790             OpenFileDialog1.Filter = "BMP File|*.BMP|JPEG File|*.JPG|GIF File|*.GIF|PNG File|*.PNG|ICO File|*.ICO|Image File|*.BMP;*.DIB;*.RLE;*.JPG;*.JPEG;*.JPE;*.JFIF;*.GIF;*.EMF;*.WMF;*.TIF;*.PNG;*.ICO|All File|*.*";
791             OpenFileDialog1.FilterIndex = 6;
792             if (OpenFileDialog1.ShowDialog() == DialogResult.OK)
793             {
794                 string strImagePath = OpenFileDialog1.FileName;
795                 Image img;
796                 img = Image.FromFile(strImagePath);
797                 Clipboard.SetDataObject(img);
798                 DataFormats.Format df;
799                 df = DataFormats.GetFormat(DataFormats.Bitmap);
800                 if (this.CanPaste(df))
801                 {
802                     this.Paste(df);
803                 }
804             }
805         }     
806 
807         //插入表格对话框
808         public void ShowInsertTableDlg()
809         {
810             richTextBoxTableDlg dlg = new richTextBoxTableDlg();
811             dlg.richTextBox = this;
812 
813             if (dlg.ShowDialog() == DialogResult.OK)
814             {
815                 richTextBoxTable r1 = new richTextBoxTable();
816                 r1.richTextBox = this;
817                 r1.cellWidth = (int)dlg.numericUpDownCellWidth.Value;
818                 r1.InsertTable((int)dlg.numericUpDownColumn.Value, (int)dlg.numericUpDownRow.Value, dlg.radioButtonAutoSzie.Checked);
819             }
820         }
821 
822 
823         public void ShowViewSourceDlg()
824         {
825             ViewRtfSoruceDlg rtfdlg = new ViewRtfSoruceDlg();
826 
827             string s = string.Format("文件很大 请等待... {0}KB", (richTextBox1.Rtf.Length /1204));
828          
829             //if (richTextBox1.Rtf.Length > 1024*1024)
830             //    MessageBox.Show(s);
831 
832             rtfdlg.textBox1.Text = richTextBox1.Rtf;
833             if (rtfdlg.ShowDialog()==DialogResult.OK)
834             {
835                 richTextBox1.Rtf = rtfdlg.textBox1.Text;
836             }
837             Application.DoEvents();
838         }
839         #endregion
840 
841         #region RichTextBox 是否显示行号
842         #endregion
843 
844         #region 实现 页面设置  打印预览 打印
845 
846         //页面设置
847         public void ShowPageSetupDlg()
848         {
849             richTextBoxPrintClass r = new richTextBoxPrintClass();
850             r.richTextBox = this;
851             r.ShowPageSetupDlg();
852         }
853         //打印预览功能
854         public void ShowShowPagePriviewDlg()
855         {
856             richTextBoxPrintClass r = new richTextBoxPrintClass();
857             r.richTextBox = this;
858             r.ShowShowPagePriviewDlg();
859         }
860 
861         //打印
862         public void ShowPrintDlg()
863         {
864             richTextBoxPrintClass r = new richTextBoxPrintClass();
865             r.richTextBox = this;
866             r.ShowPrintDlg();
867         }
868 #endregion
869 
870         #region 支持表格正确粘贴
871 
872         
873         // P/Invoke declarations
874         [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
875         private static extern IntPtr LoadLibrary(string path);
876 
877         private static IntPtr moduleHandle;
878 
879         protected override CreateParams CreateParams
880         {
881             get
882             {
883                 if (moduleHandle == IntPtr.Zero)
884                 {
885                     moduleHandle = LoadLibrary("msftedit.dll");
886                     if ((long)moduleHandle < 0x20)
887                     {
888                         throw new Win32Exception(Marshal.GetLastWin32Error(), "Could not load Msftedit.dll");
889                     }
890                 }
891 
892                 CreateParams createParams = base.CreateParams;
893                 createParams.ClassName = "RichEdit50W";
894                 if (this.Multiline)
895                 {
896                     if (((this.ScrollBars & RichTextBoxScrollBars.Horizontal) != RichTextBoxScrollBars.None) && !base.WordWrap)
897                     {
898                         createParams.Style |= 0x100000;
899                         if ((this.ScrollBars & ((RichTextBoxScrollBars)0x10)) != RichTextBoxScrollBars.None)
900                         {
901                             createParams.Style |= 0x2000;
902                         }
903                     }
904                     if ((this.ScrollBars & RichTextBoxScrollBars.Vertical) != RichTextBoxScrollBars.None)
905                     {
906                         createParams.Style |= 0x200000;
907                         if ((this.ScrollBars & ((RichTextBoxScrollBars)0x10)) != RichTextBoxScrollBars.None)
908                         {
909                             createParams.Style |= 0x2000;
910                         }
911                     }
912                 }
913                 if ((BorderStyle.FixedSingle == base.BorderStyle) && ((createParams.Style & 0x800000) != 0))
914                 {
915                     createParams.Style &= -8388609;
916                     createParams.ExStyle |= 0x200;
917                 }
918                 return createParams;
919             }
920         }
921         #endregion
922     }
923 
924 }
RichTextBoxCtrl.CS

相关文章: