c# ToolStripMenuItem.Click으로 ContextMenuStrip의 SourceControl 확인하기
ContextMenuStrip은 .네트의 팝-업 메뉴이다. 쉽게 와닿는 이름이 아니라서 헤매기 십상이다. 레퍼런스에는 shortcut menu라고 되어 있다. 낯설긴 마찬가지다. 예전에 ContextMenu로 쓰이던 게 이거로 바뀌었다. 이걸 만든 뒤 DataGridView.ContextMenuStrip처럼 이게 작동할 대상의 프라퍼티로 설정하면 된다.
작동해야 할 대상이 여럿일 때에는 ToolStripMenuItem.Click가 어디에서 작동해야 하는지 특정해야 한다. 예를 들어 하나의 ContextMenuStrip을 만들어 여러 DataGridView에 연결한 경우 이 이벤트의 센더를 호출해 봐야 ToolStripMenuItem이므로 어느 DataGridView에서 작동한 건지 알 수 없다. 아래와 같이 몇 번 거슬러 올라가야 한다.
private void menuItem1ToolStripMenuItem_Click(object sender, EventArgs e)
{
ToolStripMenuItem toolStripMenuItem = (ToolStripMenuItem)sender;
ContextMenuStrip contextMenuStrip = (ContextMenuStrip)toolStripMenuItem.Owner;
Control control = contextMenuStrip.SourceControl;
Text = control.ToString(); // DataGridView
}