ToolStrip を実装

ToolStrip Menu(Tool Bar) を実装します。
Function Key に Text 編集を実装します。
RichTextBox でダブルクリックを検出します。

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

ToolStrip Menu

  1. ToolStrip(Tool Bar) はアイコンのクリック一発で起動する便利なメニューです。
    プログラムメニューの中から良く使うメニューを集めるのが一般的です。
    MenuStrip と ToolStrip は Layout で配置済です。
    ToolStrip に幾つかのメニューを登録してみましょう。
  2. ToolStrip に貼り付ける画像を用意して下さい。
    私は、次の 64*64 の [透過GIF] 画像を用意しました。
    Image Name メソッド 説明
    cd.gif Open ファイルを開く
    fdd.gif Save 上書き保存
    dust.gif Del_Node ゴミ箱
    sibling.gif Add_Sibling 空の兄弟項目を追加
    child.gif Add_Child 空の子項目を追加
    exit.gif Exit 終了
  3. ToolStrip の左端にコントロールが表示されています。
    コントロールをクリックして一覧から Button を選択します。
    続いて二個目, 三個目, ・・・の Button を選択します。
  4. Button1 のプロパティから Image を選択して用意した画像をインポートします。
    Button2, ・・・ も同様にインポートします。

  5. Button1 の [イベントアイコン](稲妻型)から [Click] の右にあるコンボボックスにメソッドを設定します。
    Button2, ・・・ も同様に設定します。
    各メソッドは Menu を実装したときに作成済です。
    ToolStrip のアイコンをクリックして実行を確認して下さい。

Function Key

  1. Text 編集に Function Key が使えると何かと重宝します。
    RichTextBox に KeyDown のイベントを設定して下さい。
        this.richTextBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.richTextBox1_KeyDown);
    
  2. Function Key の F5 ~ F8 に機能を実装します。
    クリップボードを使うので、現在のファイルだけでなくアプリを超えて利用することが出来ます。
  3. richTextBox1_KeyDown() メソッドです。
    F5 ではキャレット(マウスカーソル)の位置から右方向にワードを抽出します。
        // Function Key 編集(クリップボードを使う)
        private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
        {
            string str;
            int st_idx, nxline, nx_idx, i;
            switch (e.KeyCode)
            {
                case Keys.F5:       //Key Word
                    st_idx = richTextBox1.SelectionStart;
                    for (nx_idx = st_idx + 1; nx_idx < richTextBox1.Text.Length; nx_idx++)
                    {
                        for (i = 0; i < m_sep.Length && richTextBox1.Text[nx_idx] != m_sep[i]; i++) ;
                        if (i < m_sep.Length) break;
                    }
                    m_sou = richTextBox1.Text.Substring(st_idx, nx_idx - st_idx);
                    this.Text = "[" + m_sou + "]";
                    Clipboard.SetDataObject(m_sou, true);
                    richTextBox1.Select(st_idx, nx_idx - st_idx);
                    richTextBox1.SelectionColor = Color.DarkMagenta;
                    richTextBox1.Select(0, 0);
                    break;
                case Keys.F6:       //Line Copy
                    st_idx = richTextBox1.GetFirstCharIndexOfCurrentLine();
                    nxline = richTextBox1.GetLineFromCharIndex(st_idx) + 1;
                    nx_idx = richTextBox1.GetFirstCharIndexFromLine(nxline);
                    str = richTextBox1.Text.Substring(st_idx, nx_idx - st_idx) + "\n"; 
                    Clipboard.SetDataObject(str, true);
                    richTextBox1.Select(nx_idx,0);
                    break;
                case Keys.F7:       //Line Cut
                    st_idx = richTextBox1.GetFirstCharIndexOfCurrentLine();
                    nxline = richTextBox1.GetLineFromCharIndex(st_idx) + 1;
                    nx_idx = richTextBox1.GetFirstCharIndexFromLine(nxline);
                    str = richTextBox1.Text.Substring(st_idx, nx_idx - st_idx) + "\n"; 
                    Clipboard.SetDataObject(str, true);
                    richTextBox1.Select(st_idx, nx_idx - st_idx);
                    richTextBox1.SelectedText = "";
                    break;
                case Keys.F8:       //Paste
                    IDataObject data = Clipboard.GetDataObject();
                    if (data != null && data.GetDataPresent(DataFormats.Text) == true)
                    { richTextBox1.Paste(); }
                    break;
            }
        }
    
  4. m_sep は区切り文字を定義した char の配列です。
        char[]      m_sep = { '\'', '"', ' ', '\n', ',', '=', '(', ')', '。', '、' };
    

Double Click

  1. RichTextBox でダブルクリックを検出して、ワードを抽出します。
    抽出した文字列が実在するファイルのときは、関連付けられたプログラムで起動します。
    デザイン画面から RichTextBox を選択して、稲妻アイコンを選択します。
    DoubleClick のイベントに richTextBox1_DoubleClick をタイプします。
        this.richTextBox1.KeyDown +=
            new System.Windows.Forms.KeyEventHandler(this.richTextBox1_KeyDown);
        this.richTextBox1.MouseDoubleClick +=
            new System.Windows.Forms.MouseEventHandler(this.richTextBox1_DoubleClick);
    
  2. キャレット(マウスカーソル)位置のファイル名を抽出して、Process.Start で起動します。
    ファイルが存在しないときや文字列のときは、クリップボードと m_sou に格納します。
    抽出したワードはタイトルバーで確認することが出来ます。
    F5 キーの抽出はキャレット位置から始めますが、ダブルクリックでは区切り文字までさかのぼって選択します。
    特に引用符(”’)で囲まれているときは、威力を発揮します。
        private void richTextBox1_DoubleClick(object sender, MouseEventArgs e)
        {
            int pos, rt, i;
            pos = richTextBox1.SelectionStart;
            for (; pos > 0; pos--)
            {
                for (i = 0; i < m_sep.Length && richTextBox1.Text[pos]!=m_sep[i]; i++) ;
                if (i < m_sep.Length) break;
            }
            if (richTextBox1.Text[pos] == '"' || richTextBox1.Text[pos] == '\'')
            {
                for (rt = pos + 2; rt < richTextBox1.Text.Length; rt++)
                { if (richTextBox1.Text[pos] == richTextBox1.Text[rt])  break; }
            }
            else
            {
                for (rt = pos + 1; rt < richTextBox1.Text.Length; rt++)
                {
                    for (i = 0; i < m_sep.Length && richTextBox1.Text[rt] != m_sep[i]; i++) ;
                    if (i < m_sep.Length) break;
                }
            }
            if (pos >= 0) pos++;
            m_sou = richTextBox1.Text.Substring(pos, rt-pos);
            this.Text = "[" + m_sou + "]";
            Clipboard.SetDataObject(m_sou, true);
    
            if (File.Exists(m_sou))
            {   System.Diagnostics.Process.Start(m_sou);
                return;
            }
            if (String.Compare(m_sou.Substring(0, 5), "http:", true) == 0)
            {   System.Diagnostics.Process.Start(m_sou);  }
        }
    

[Next Chapter ↓] User Menu を登録
[Previous Chapter ↑] Search Menu

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