Rich Text Box に Contex Menu を貼り付けます。

    Copy(C)
    Cut(T)
    Paste(P)

CLI で動かす

  1. ContexMenu.cs の名前で utf-8 でタイプして下さい。
    Visual Studio の自動生成プロジェクトからの引用で、ソースコードが長くなっています。
    CSC ContexMenu.cs コマンドを使ってファイル1本でビルド出来ます。
    /*★ メニュー選択で、ファイルから入力する    前田 稔 ★*/
    //   RichTextBox に ContexMenu を設定しました
    using System;
    using System.IO;
    using System.Drawing;
    using System.Windows.Forms;
    using System.Data;
    
    public class MyForm : Form
    {
        private RichTextBox richTextBox1;
        private string TxtFile = "";
        private string m_str = "RichTextBox Test";
        private ContextMenuStrip contextMenuStrip1;
        private ToolStripMenuItem CopyCToolStripMenuItem;
        private ToolStripMenuItem CutTToolStripMenuItem;
        private ToolStripMenuItem PastePToolStripMenuItem;
        private System.ComponentModel.IContainer components;
    
        public MyForm()
        {   Resize += new System.EventHandler(FormResize);
            InitializeComponent();
        }
        
        private void InitializeComponent()
        {   // メインメニューを生成
            MainMenu menu = new MainMenu();
    
            // ファイルメニューを生成
            MenuItem item = menu.MenuItems.Add("ファイル(&F)");
            item.MenuItems.Add(new MenuItem("開く(&O)...", new EventHandler(this.FileOpen)));
            item.MenuItems.Add(new MenuItem("保存(&S)...", new EventHandler(this.FileSave)));
            item.MenuItems.Add("-");
            item.MenuItems.Add(new MenuItem("終了(&X)", new EventHandler(this.Exit), Shortcut.CtrlQ));
    
            // 編集メニューを生成
            item = menu.MenuItems.Add("編集(&E)");
            item.MenuItems.Add(new MenuItem("Copy(&C)...", new EventHandler(this.Copy)));
            item.MenuItems.Add(new MenuItem("Cut(&T)...", new EventHandler(this.Cut)));
            item.MenuItems.Add(new MenuItem("Paste(&P)...", new EventHandler(this.Paste)));
            item.MenuItems.Add(new MenuItem("Undo(&U)...", new EventHandler(this.Undo)));
            item.MenuItems.Add(new MenuItem("Redo(&R)...", new EventHandler(this.Redo)));
    
            this.components = new System.ComponentModel.Container();
            this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
            this.CopyCToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.CutTToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.PastePToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.contextMenuStrip1.SuspendLayout();
            this.SuspendLayout();
    
            // フォームのメニューとして設定
            this.Menu = menu;
            this.richTextBox1 = new System.Windows.Forms.RichTextBox();
            this.SuspendLayout();
            // richTextBox1
            this.richTextBox1.ContextMenuStrip = contextMenuStrip1;
            this.richTextBox1.Location = new System.Drawing.Point(12, 12);
            this.richTextBox1.Name = "richTextBox1";
            this.richTextBox1.Size = new System.Drawing.Size(1000, 480);
            this.richTextBox1.TabIndex = 0;
            this.richTextBox1.Text = m_str;
            // contextMenuStrip1
            this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[]
            {   this.CopyCToolStripMenuItem,
                this.CutTToolStripMenuItem,
                this.PastePToolStripMenuItem
            });
            this.contextMenuStrip1.Name = "contextMenuStrip1";
            this.contextMenuStrip1.Size = new System.Drawing.Size(210, 82);
            // CopyCToolStripMenuItem
            this.CopyCToolStripMenuItem.Name = "CopyCToolStripMenuItem";
            this.CopyCToolStripMenuItem.Size = new System.Drawing.Size(209, 28);
            this.CopyCToolStripMenuItem.Text = "Copy(&C)";
            this.CopyCToolStripMenuItem.Click += new System.EventHandler(this.Copy);
            // CutTToolStripMenuItem
            this.CutTToolStripMenuItem.Name = "CutTToolStripMenuItem";
            this.CutTToolStripMenuItem.Size = new System.Drawing.Size(209, 28);
            this.CutTToolStripMenuItem.Text = "Cut(&T)";
            this.CutTToolStripMenuItem.Click += new System.EventHandler(this.Cut);
            // CutTToolStripMenuItem
            this.PastePToolStripMenuItem.Name = "PastePToolStripMenuItem";
            this.PastePToolStripMenuItem.Size = new System.Drawing.Size(209, 28);
            this.PastePToolStripMenuItem.Text = "Paste(&P)";
            this.PastePToolStripMenuItem.Click += new System.EventHandler(this.Paste);
    
            // MyForm
            this.ClientSize = new System.Drawing.Size(1020, 500);
            this.ContextMenuStrip = this.contextMenuStrip1;
            this.contextMenuStrip1.ResumeLayout(false);
            this.Controls.Add(this.richTextBox1);
            this.Name = "MyForm";
            this.ResumeLayout(false);
        }
    
        private void FormResize(object sender, EventArgs e)
        {   richTextBox1.Width = this.Width - 30;
            richTextBox1.Height = this.Height - 100;
        }
    
        // 終了メニューのイベントハンドラ
        private void Exit(object sender, EventArgs e)
        {   this.Close();  }
    
        // ファイル-開くメニューのイベントハンドラ
        private void FileOpen(object sender, EventArgs e)
        {   OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.Filter = "Text ファイル|*.txt;*.cs;*.htm|すべてのファイル (*.*)|*.*" ;
            if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
            {   TxtFile = openFileDialog1.FileName;
                StreamReader reader = new StreamReader(TxtFile);
                m_str = reader.ReadToEnd();
                reader.Close();
                richTextBox1.Text = m_str;   
                Invalidate();
            }
        }
    
        // ファイル-保存メニューのイベントハンドラ
        private void FileSave(object sender, EventArgs e)
        {   SaveFileDialog saveDialog = new SaveFileDialog();
            if (saveDialog.ShowDialog(this) == DialogResult.OK)
            {   TxtFile = saveDialog.FileName;
                StreamWriter writer = new StreamWriter(TxtFile, false);	//false=上書き
                m_str = richTextBox1.Text;
                writer.WriteLine(m_str);
                writer.Close();
            }
        }
    
        //★ 編集メソッド
        private void Copy(object sender, EventArgs e)
        {   if (richTextBox1.SelectionLength > 0)
            { richTextBox1.Copy(); }
        }
    
        private void Cut(object sender, EventArgs e)
        {   if (richTextBox1.SelectionLength > 0)
            { richTextBox1.Cut(); }
        }
    
        private void Paste(object sender, EventArgs e)
        {   ClipPaste();  }
    
        private void Undo(object sender, EventArgs e)
        {   if (richTextBox1.CanUndo)
            { richTextBox1.Undo(); }
        }
    
        private void Redo(object sender, EventArgs e)
        {   if (richTextBox1.CanRedo)
            { richTextBox1.Redo(); }
        }
    
        private void ClipPaste()
        {   IDataObject data = Clipboard.GetDataObject();
            if (data != null && data.GetDataPresent(DataFormats.Text) == true)
            {   int pos = richTextBox1.SelectionStart;
                richTextBox1.Select(pos, 0);
                richTextBox1.SelectedText = Clipboard.GetText();
            }
        }
    }
    
    class form01
    {   [STAThread]
        public static void Main()
        {   MyForm mf = new MyForm();
            Application.Run(mf);
        }
    }
    
  2. スタートボタンから「VSXXXX の開発者コマンドプロンプトを起動して下さい。
    ContexMenu.cs が置かれているディレクトリに移動して CSC コマンドでビルド出来ます。
    >CD C:\Data\C#\BAT\win
    >CSC ContexMenu.cs
    >ContexMenu.exe
    
  3. ContexMenu.exe を起動して「ファイル(F)/開く(O)」から ContexMenu.cs を選択するとソースコードが RichTextBox に表示されます。
    マウスで文字列を選択して、右ボタンをクリックするとページ先頭の ContexMenu が開きます。
    Copy(C), Cut(T), Paste(P) の動作を確認して下さい。
    同様の機能が「編集(E)」メニューにも備わっているので動作を確認して下さい。
  4. 修正したテキストを「ファイル(F)/保存(S)」から適当なファイル名で保存して下さい。
    「ファイル(F)/終了(X)」でプログラムを終了します。

超初心者のプログラム入門(C# Frame Work)