0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【WindowsForm】RichTextBox に右クリックメニューを実装する

Last updated at Posted at 2024-11-11

今回は WindowsForm の
RichTextBox に
右クリックメニューを
付与する方法の紹介です。

この手順を踏めば
右クリックメニューを
簡単に実装出来ます。


手順 1 フィールドを足す

まずはフィールドに
次の記述を足します。

作業 1
private ContextMenuStrip contextMenuStripOnPanel = new ContextMenuStrip();

そのままコピペして
貼り付けて頂いて OK です。


手順 2 コンストラクタに足す

次にコンストラクタの最後に
次の記述を足します。

作業 2
contextMenuStripOnPanel.Opening += new CancelEventHandler(cms_Opening);
richTextBox1.ContextMenuStrip = contextMenuStripOnPanel;

そのままコピペして
貼り付けて頂いて OK です。

コンストラクタという表現があいまいで
何を指しているか分からない場合は
フォームの初期化処理の最後に記述して下さい。


手順 3 メソッドを足す

最後にメソッドを足します。

作業 3
        void cms_Opening(object sender, CancelEventArgs e)
        {
            ContextMenuStrip menuOnPanel = (ContextMenuStrip)sender;

            Point mp = MousePosition;
            menuOnPanel.SourceControl.PointToClient(mp);

            contextMenuStripOnPanel.Items.Clear();

            contextMenuStripOnPanel.Items.Add("コピー");
            contextMenuStripOnPanel.Items[0].Click += PanelMenuItems0_Click;

            contextMenuStripOnPanel.Items.Add("貼り付け");
            contextMenuStripOnPanel.Items[1].Click += PanelMenuItems1_Click;

            e.Cancel = false;
        }

        private void PanelMenuItems0_Click(object sender, EventArgs e)
        {
            if (0 < richTextBox1.SelectionLength)
            {
                Clipboard.SetText(richTextBox1.Text.Substring(richTextBox1.SelectionStart, richTextBox1.SelectionLength));
            }

            richTextBox1.Focus();
        }

        private void PanelMenuItems1_Click(object sender, EventArgs e)
        {
            int selectoin = richTextBox1.SelectionStart;
            string insertString = Clipboard.GetText();
            richTextBox1.Text = richTextBox1.Text.Substring(0, selectoin) + insertString + richTextBox1.Text.Substring(richTextBox1.SelectionStart + richTextBox1.SelectionLength);
            richTextBox1.SelectionStart = selectoin + insertString.Length;
            richTextBox1.SelectionLength = 0;
            richTextBox1.Focus();
        }

そのままコピペして
貼り付けて頂いて OK です。

以上で作業は完了です。


以上 RichTextBox に
最低限の右クリックメニューを足す
手順を紹介しました。

このコードを解析すれば
右クリックメニューを増やすのも
簡単にできると思います。

この記事が皆さんの開発の助けになれますように。
閲覧ありがとうございました。


参考サイト

この記事は下記のサイトを参考にしました。
https://qiita.com/guijiu/items/ef6a29fcfd9741241e43

参考にしたサイト作成者様に感謝します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?