Contex Menu

Contex Menu を設定して編集メニューをコーディングします。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. 今回は Contex Menu を設定して編集メニューをコーディングします。
    Exec メニューもコーディングするので、重ならないように using を追加して下さい。
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    using System.Text;          // for Encoding
    using System.IO;            // for File, StreamReader
    using System.Collections;   // ArrayList
    using System.Diagnostics;   // Process の起動
    
  2. TextBox を使うと自動的に Contex Menu が設定されるのですが、RichTextBox には設定されません。
    本格的な Editor となると RichTextBox に限るので、Contex Menu を設定します。
    行のペーストは Paste メソッドと共通です。
    メニュー メソッド
    コピー(&C)Copy メソッド
    カット(&T)Cut メソッド
    ペースト(&P)Paste メソッド
    行コピー(&B)LCopy メソッド
    行カット(&L)LCut メソッド
  3. RichTextBox に Contex Menu を設定します。
    Contex Menu は次のページを参照して下さい。
    ContextMenu(右クリックメニュー)を設定する
    Rich Contex
    1. ツールボックスから Form に ContextMenuStrip をドラッグします。
    2. 画面下に MenuStrip1 と並んで ContextMenuStrip1 が表示されます。
      同時に画面上部に[ここへ入力]が表示されます。
      先に TabControl を設定しているので、上から重ねて表示されるかも知れません。
    3. 最初のメニュー「コピー(&C)」とタイプします。
    4. イベントアイコンをクリックして Click に Copy とタイプします。
      (メニューと共通のイベントハンドラは作成済です)
    5. 同じ要領でコンテックスメニューをタイプして下さい。
    6. richTextBox1 のプロパティから ContextMenuStrip に ContextMenuStrip1 を選択します。
      ContextMenu が正常に作成されていると ContextMenuStrip1 が選択できるようになっています。

編集メニュー

  1. 編集メニューをコーディングします。
    Copy や Paste はクリップボードを介して操作することで、他の汎用的なアプリと共有出来ます。
    例えば、メモ帳でコピーした TEXT を張り付けたり、逆の操作も出来るようになります。
    またブラウザの URL をコピーして、張り付けることも出来ます。
        //☆ 編集メソッド
        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 LCopy(object sender, EventArgs e)
        {
            m_fclass.LineEdit(richTextBox1);
            Clipboard.SetDataObject(m_fclass.lstr, true);
        }
        private void LCut(object sender, EventArgs e)
        {
            m_fclass.LineEdit(richTextBox1);
            Clipboard.SetDataObject(m_fclass.lstr, true);
            richTextBox1.Text = richTextBox1.Text.Remove(m_fclass.st, m_fclass.nx - m_fclass.st);
            richTextBox1.SelectionStart = m_fclass.st;
        }
        private void ClipPaste()
        {
            IDataObject data = Clipboard.GetDataObject();
            if (data != null && data.GetDataPresent(DataFormats.Text) == true)
            {
                richTextBox1.Paste();
            }
        }
    
  2. 編集メニュー以外に、この段階でプログラム出来るメニューもコーディングします。
    Exec は、編集中のファイルを既定のプログラムで実行します。
    Ut8Load, UniLoad, JisLoad, EucLoad は、文字化けするときコードを指定して読み直します。
        private void Exec(object sender, EventArgs e)
        {
            if (File.Exists(m_fclass.path))
                System.Diagnostics.Process.Start(m_fclass.path);
        }
    
        private void Ut8Load(object sender, EventArgs e)
        {
            m_fclass.ReadFile("utf-8");
            m_fclass.Load(richTextBox1);
        }
        private void UniLoad(object sender, EventArgs e)
        {
            m_fclass.ReadFile("utf-16");
            m_fclass.Load(richTextBox1);
        }
        private void JisLoad(object sender, EventArgs e)
        {
            m_fclass.ReadFile("shift_jis");
            m_fclass.Load(richTextBox1);
        }
        private void EucLoad(object sender, EventArgs e)
        {
            m_fclass.ReadFile("euc-jp");
            m_fclass.Load(richTextBox1);
        }
        private void HelpAbout(object sender, EventArgs e)
        {
            MessageBox.Show("Text Editor by Maeda Minoru  Contex Version");
        }
    
  3. プログラムを実行して、編集メニューや Exec メニューが実行できることを確認して下さい。
    また RichTextBox 上で右クリックして Contex Menu の実行を確認して下さい。
    一応これで Text Editor が使えるようになります。

[Next Chapter ↓] XML に保存
[Previous Chapter ↑] ファイル入出力

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