2015年7月16日木曜日

C#のContextMenuStripでどのコントロールをクリックしたのかを知る

C#で右クリックするにはContextMenuStripを使用します。基本的にはToolStripMenuItemのクリックイベントを使用します。しかしそれだけでは「ContextMenuStripに設定されたどれか」しかわかりません。ということでどうにかします。が、結構簡単なのでソースコードを見たほうが楽でしょう。

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace ContextMenuStripTest {
    public partial class Form1 : Form {
        Control ContextMenuStrip1_Source;

        public Form1() {
            InitializeComponent();

            contextMenuStrip1.Opening += contextMenuStrip1_Opening;
            copyToolStripMenuItem.Click += CopyToolStripMenuItem_Click;
        }

        private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) {
            ContextMenuStrip Menu = sender as ContextMenuStrip;

            if (Menu == null) {
                return;
            }

            ContextMenuStrip1_Source = Menu.SourceControl;
        }

        private void CopyToolStripMenuItem_Click(object sender, EventArgs e) {
            if (ContextMenuStrip1_Source == null) {
                return;
            }

            Clipboard.SetText(ContextMenuStrip1_Source.Text);
        }
    }
}

OpeningイベントでContextMenuStrip.SourceControlを獲得し、広域変数に設定します。このSourceはControl型です。そのためControlから継承された、例えばTextなどはそのまま使用することができるため、いくつかのテキストボックスに1つのContextMenuStripを設定し、そのテキストボックスに入っている文字列を獲得する ということが出来ます。

0 件のコメント:

コメントを投稿