編集メニューを実装

RichTextBox を編集する Edit Menu を実装します。

前田稔の超初心者のプログラム入門

Edit Menu

  1. RichTextBox には TEXT を編集する便利な機能が備わっています。
    この機能を利用して RichTextBox を編集する Edit Menu を実装します。
    メソッド(イベントハンドラ)は Menu を登録 で作成済です。
    親メニュー 子メニュー メソッド 説明
    テキスト(&T)
    コピー(&C) Text_Copy 選択した TEXT をコピーします
    削除(&D) Text_Cut 選択した TEXT を削除します
    貼り付け(&P) Text_Paste コピーした TEXT を貼り付けます
    元に戻す(&U) Text_Undo 編集を取り消してもとに戻します
    やり直す(&R) Text_Redo 取り消した編集を戻します
    編集(&E) Editor 選択ファイルを Editor で起動します
  2. 編集(E) のメソッドでは、選択されたファイルをエディッタで起動するので using を追加してください。
    ED_Path は起動する Editor(メモ帳)のパスです。
    RichTextBox には TEXT 編集の基本的な機能がサポートされています。
    また RichTextBox が更新されると richTextBox1.Modified が true に設定されます。
    Text_Copy() では、選択した文字列をクリップボートと m_sou に格納します。
    m_sou は、検索キーやパスワードを設定する領域です。
    using System.Diagnostics;   // Process の起動
    string      m_sou = "Source";       // 検索キー(パスワード)
    string      ED_Path = @"C:\WINDOWS\System32\notepad.exe";
    
        //☆ テキスト編集
        private void Text_Copy(object sender, EventArgs e)
        {
            if (richTextBox1.SelectionLength > 0)
            {   richTextBox1.Copy();
                m_sou = Clipboard.GetText();
            }
        }
        private void Text_Cut(object sender, EventArgs e)
        {
            if (richTextBox1.SelectionLength > 0)
            { richTextBox1.Cut(); }
        }
        private void Text_Paste(object sender, EventArgs e)
        {
            ClipPaste();
        }
        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();
            }
            richTextBox1.Modified = true;
        }
        private void Text_Undo(object sender, EventArgs e)
        {
            if (richTextBox1.CanUndo)
            { richTextBox1.Undo(); }
        }
        private void Text_Redo(object sender, EventArgs e)
        {
            if (richTextBox1.CanRedo)
            { richTextBox1.Redo(); }
        }
        private void Editor(object sender, EventArgs e)
        {
            string str;
            str = richTextBox1.SelectedText.ToString();
            if (File.Exists(str))
            {   Process.Start(ED_Path, str);
                return;
            }
            MessageBox.Show("ファイルが見つかりません");
        }
    
  3. Text_Paste() で richTextBox1.Paste() を使うと、文字のサイズや色がそのまま貼り付けられてテキスト表示が乱れます。
        private void Text_Paste(object sender, EventArgs e)
        {
            IDataObject data = Clipboard.GetDataObject();
            if (data != null && data.GetDataPresent(DataFormats.Text) == true)
            { richTextBox1.Paste(); }
        }
    
    そこで ClipPaste() 関数を使ってコピーしています。
  4. 編集(E) メソッドでは、選択されたファイルを Process で起動するので using を追加してください。
    @"c:\bin\edit.exe" は自作の Text Editor のプログラムです。
    using System.Diagnostics;       // Process の起動
    string ED_Path = @"c:\bin\edit.exe";
    
    メモ帳を使うときは、次のように修正して下さい。
    string ED_Path = @"C:\WINDOWS\System32\notepad.exe";
    
  5. RichTextBox の更新は richTextBox1.Modified で知ることが出来ます。
    TEXT が更新された時は ArrayList(t_txt) も修正しなければなりません。
    NODE が切り替わったときに treeView1_AfterSelect() 関数で ArrayList を更新します。
    実質的に ArrayList を更新するのは CheckText() 関数です。
    treeView1_AfterSelect(), CheckText(), SetDate() は RichTextBox で説明しています。
  6. class form01 で [STAThread] を設定して下さい。
    class form01
    {
        [STAThread]
        public static void Main()
        {
            MyForm mf = new MyForm();
            Application.Run(mf);
        }
    }
    

Context Menu

  1. Context Menu(右クリックメニュー)に Edit Menu(ページ前半で説明)で定義したメニューを設定します。
    CSForm.cs のデザインを表示して、ツールボックスから ContextMenuStrip を貼り付けます。
    ContexMenu の [ここへ入力] に、先に示した表のメニューをタイプします。
  2. ContextMenuStrip のメニューを選択してイベント(稲妻のアイコン)をクリックします。
    Click にメソッドをタイプするのですが、既にメソッドは Edit Menu としてコーディングされています。
  3. Context Menu はマウスの右クリックで呼び出されます。
    InitializeComponent() の richTextBox1 に contextMenuStrip1 を設定します。
    これで RichTextBox 上で右クリックすると ContextMenu が表示されます。
    表示されたメニューから実行するメソッドを選択して動作を確認して下さい。
        private void InitializeComponent()
        {
            ・・・
            // richTextBox1
            this.richTextBox1.ContextMenuStrip = this.contextMenuStrip1;
            ・・・
    

[Next Chapter ↓] Tree Menu
[Previous Chapter ↑] Menu を登録

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