zoukankan      html  css  js  c++  java
  • C#RichTextBox带右键菜单封装

    代码来源于网上。

    首先创建解决方案,类

    using System;
    using System.Windows.Forms;
    using System.Drawing;
    using MyRichTextBox.Properties;
    
    namespace MyRichTextBox
    {
        public class MyRichTextBox : RichTextBox
        {
            private System.ComponentModel.IContainer components = null;
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            private ContextMenuStrip contextMenuStrip1;
            private System.Windows.Forms.ToolStripMenuItem CopyItem;
            private System.Windows.Forms.ToolStripMenuItem PasterItem;
            private System.Windows.Forms.ToolStripMenuItem UndoItem;
            private System.Windows.Forms.ToolStripMenuItem CutItem;
            private System.Windows.Forms.ToolStripMenuItem ClearItem;
            private System.Windows.Forms.ToolStripMenuItem SelectAllItem;
            private System.Windows.Forms.ToolStripMenuItem RedoItem;
            private ToolStripSeparator toolStripSeparator1;
            private ToolStripSeparator toolStripSeparator2;
    
            public MyRichTextBox()
            {
                InitializeComponent();
            }
            private void InitializeComponent()
            {
                this.components = new System.ComponentModel.Container();
              //  System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(XtraForm1));
    
                this.contextMenuStrip1 = new ContextMenuStrip(this.components);
                this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
                this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
                this.CopyItem = new ToolStripMenuItem();
                this.PasterItem = new ToolStripMenuItem();
                this.UndoItem = new ToolStripMenuItem();
                this.CutItem = new ToolStripMenuItem();
                this.ClearItem = new ToolStripMenuItem();
                this.SelectAllItem = new ToolStripMenuItem();
                this.RedoItem = new ToolStripMenuItem();
                this.contextMenuStrip1.SuspendLayout();
                this.SuspendLayout();
    
    
                this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
                this.UndoItem,
               this.toolStripSeparator1 ,
                this.CutItem,
                this.CopyItem,
                this.PasterItem,
                this.ClearItem,
              this.toolStripSeparator2,
                this.SelectAllItem,            
                this.RedoItem             
                });
                this.contextMenuStrip1.Name = "contextMenuStrip1";
                this.contextMenuStrip1.Size = new System.Drawing.Size(149, 166);
                this.ContextMenuStrip = this.contextMenuStrip1;
    
                base.MouseUp += new MouseEventHandler(MyRichTextBox_MouseUp);
    
                this.toolStripSeparator1.Name = "toolStripSeparator1";
                this.toolStripSeparator1.Size = new System.Drawing.Size(149, 6);
                // 
                // toolStripSeparator2
                // 
                this.toolStripSeparator2.Name = "toolStripSeparator2";
                this.toolStripSeparator2.Size = new System.Drawing.Size(149, 6);
    
    
    
                this.UndoItem.Name = "UndoItem";
                this.UndoItem.Size = new System.Drawing.Size(100, 22);
                this.UndoItem.Image = Resources.undo;
                this.UndoItem.Text = "撤销          ";
                this.UndoItem.Click += new System.EventHandler(this.UndoItem_Click);
                // 
                // CutItem
                // 
                this.CutItem.Name = "CutItem";
                this.CutItem.Size = new System.Drawing.Size(100, 22);
                this.CutItem.Text = "剪切           ";
                this.CutItem.Image = Resources.cut;
                this.CutItem.Click += new System.EventHandler(this.CutItem_Click);
                // 
                // CopyItem
                // 
                this.CopyItem.Name = "CopyItem";
                this.CopyItem.Size = new System.Drawing.Size(100, 22);
                this.CopyItem.Text = "复制";
                this.CopyItem.Image = Resources.copy;
                this.CopyItem.Click += new System.EventHandler(this.CopyItem_Click);
                // 
    
                this.CopyItem.Name = "Redo";
                this.CopyItem.Size = new System.Drawing.Size(100, 22);
                this.CopyItem.Text = "重做";
                this.CopyItem.Image = Resources.cancel;
                this.RedoItem.Click += new EventHandler(RedoItem_Click);
                // PasterItem
                // 
                this.PasterItem.Name = "PasterItem";
                this.PasterItem.Size = new System.Drawing.Size(100, 22);
                this.PasterItem.Text = "粘贴";
                this.PasterItem.Image = Resources.paster;
                this.PasterItem.Click += new System.EventHandler(this.PasterItem_Click);
                // 
                // ClearItem
                // 
                this.ClearItem.Name = "ClearItem";
                this.ClearItem.Size = new System.Drawing.Size(100, 22);
                this.ClearItem.Text = "删除";
                this.ClearItem.Image = Resources.clear;
                this.ClearItem.Click += new System.EventHandler(this.ClearItem_Click);
                // 
                // SelectAllItem
                // 
                this.SelectAllItem.Name = "SelectAllItem";
                this.SelectAllItem.Size = new System.Drawing.Size(100, 22);
                this.SelectAllItem.Text = "全选";
                this.SelectAllItem.Image = Resources.all;
                this.SelectAllItem.Click += new System.EventHandler(this.SelectAllItem_Click);
    
    
                this.contextMenuStrip1.ResumeLayout(false);
                this.ResumeLayout(false);
    
            }
    
            private void MyRichTextBox_MouseUp(object sender, MouseEventArgs e)//控制右键菜单的显示
            {
                if (e.Button == MouseButtons.Right)
                {
                    if (base.CanRedo)//redo重做
                    {
                        UndoItem.Enabled = true;//CopyItem
                    }
                    else
                    {
                        UndoItem.Enabled = false;
                    }
                    if (base.CanUndo)//undo
                    {
                        UndoItem.Enabled = true;
                    }
                    else
                    {
                        UndoItem.Enabled = false;
                    }
    
                    if (base.SelectionLength > 0)
                    {
                        CopyItem.Enabled = true;
                        CutItem.Enabled = true;//剪切
                        ClearItem.Enabled = true;
                    }
                    else
                    {
                        CopyItem.Enabled = false;
                        CutItem.Enabled = false;
                        ClearItem.Enabled = false;
                    }
    
                    if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
                    {
                        PasterItem.Enabled = true;
                    }
                    else
                    {
                        PasterItem.Enabled = false;
                        contextMenuStrip1.Show(this, new Point(e.X, e.Y));
                    }
                }
            }
            private void CopyItem_Click(object sender, EventArgs e)
            {
                this.contextMenuStrip1.SourceControl.Select();//先获取焦点,防止点两下才运行
                RichTextBox rtb = (RichTextBox)this.contextMenuStrip1.SourceControl;
                rtb.Copy();
            }
    
            private void PasterItem_Click(object sender, EventArgs e)
            {
                this.contextMenuStrip1.SourceControl.Select();
                RichTextBox rtb = (RichTextBox)this.contextMenuStrip1.SourceControl;
                rtb.Paste();
    
            }
    
            private void UndoItem_Click(object sender, EventArgs e)
            {
                this.contextMenuStrip1.SourceControl.Select();
                RichTextBox rtb = (RichTextBox)this.contextMenuStrip1.SourceControl;
                rtb.Undo();
            }
    
            private void CutItem_Click(object sender, EventArgs e)
            {
                this.contextMenuStrip1.SourceControl.Select();
                RichTextBox rtb = (RichTextBox)this.contextMenuStrip1.SourceControl;
                rtb.Cut();
            }
    
    
            private void ClearItem_Click(object sender, EventArgs e)
            {
                this.contextMenuStrip1.SourceControl.Select();
                RichTextBox rtb = (RichTextBox)this.contextMenuStrip1.SourceControl;
                rtb.SelectedText = string.Empty;
            }
    
            private void SelectAllItem_Click(object sender, EventArgs e)
            {
                this.contextMenuStrip1.SourceControl.Select();
                RichTextBox rtb = (RichTextBox)this.contextMenuStrip1.SourceControl;
                rtb.SelectAll();
            }
    
            private void RedoItem_Click(object sender, EventArgs e)
            {
                this.contextMenuStrip1.SourceControl.Select();
                RichTextBox rtb = (RichTextBox)this.contextMenuStrip1.SourceControl;
                rtb.Redo();
            }
        }
    }

    调用方式:
    首先添加生成的dll,然后在窗口上添加一个richTextBox1控件,在构建函数中,改一下

       this.richTextBox1 = new MyRichTextBox.MyRichTextBox();
  • 相关阅读:
    linux常用的一些访问目录
    专业术语
    java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中
    java基础知识回顾之javaIO类--File类应用:删除带内容的目录
    java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter
    java基础知识回顾之javaIO类--File类应用:递归深度遍历文件
    java基础知识回顾之javaIO类--File类
    java基础知识回顾之java集合类-Properties集合
    java基础知识回顾之---java StringBuffer,Stringbuilder与String的区别
    java基础知识回顾之---java StringBuilder与StringBuffer异同点
  • 原文地址:https://www.cnblogs.com/bantongshui/p/3240817.html
Copyright © 2011-2022 走看看