MIT’s blog

個人的なメモかな

コンテキストメニューで印入力

ラベルコントロールコンテキストメニューを表示して入力する方法をなかなか理解出来なかったのですが、やっと実装出来ました。コンテキストメニューを表示するのはさほど難しい話では無かったです。

ContextMenuStrip contextMenuStrip = new ContextMenuStrip();
contextMenuStrip.Items.Add("◎", null, new EventHandler(lblMark_Selected));
contextMenuStrip.Items.Add("○", null, new EventHandler(lblMark_Selected));
contextMenuStrip.Items.Add("▲", null, new EventHandler(lblMark_Selected));
contextMenuStrip.Items.Add("△", null, new EventHandler(lblMark_Selected));
contextMenuStrip.Items.Add("×", null, new EventHandler(lblMark_Selected));
contextMenuStrip.Items.Add("注", null, new EventHandler(lblMark_Selected));
contextMenuStrip.Items.Add(" ", null, new EventHandler(lblMark_Selected));

として、これを表示したいラベルコントロールのContextMenuStripにセットするだけ。

lblMark.ContextMenuStrip = contextMenuStrip;

ただ、今回の場合はこのラベルコントロールを配列にしていてイベントハンドラーでどの様に処理するのかグーグル先生に確認しても明確な回答が得られなかった。まあ、そこで自力で解決するしかないのでデバッグ機能を利用しながら使えそうなプロパティを探り、ようやく実装に至った訳です。

private void lblMark_Selected(object sender, EventArgs e)
{
    ToolStripMenuItem toolStripMenuItem = sender as ToolStripMenuItem;
    ContextMenuStrip contextMenuStrip = (ContextMenuStrip)toolStripMenuItem.Owner;
    Label label = (Label)contextMenuStrip.SourceControl;
    label.Text = sender.ToString();
}

コンテキストメニュー実装