如何确定Clicked和contextMenuStrp出现在哪个控件上?

时间:2012-02-23 09:58:31

标签: c# controls click

我已将contextMenuStrip分配给两个ListBox控件的相同上下文菜单属性。 我想确定其中哪些已激活上下文菜单。 因为我必须根据在运行时点击的控件来更改某些条目。

        private void copyNotesToClipboardStripMenu_Click(object sender, EventArgs e)
        {
            ListBox cntrl = conMenuNotes.SourceControl as ListBox;
            //cntrl does not contain info about which ListBox was clicked :((

            //check which ListBox was clicked
            if (/*oneListBox*/)
            {
                 //do something                    
            }
            if(/*anotherLiskBox*/)
            {    
                //do something
            }              
        }

当我阅读其他帖子时,它应该是标签属性中点击控件的名称。

我看到 cntrl.Label null

我做错了什么? 建议我如何解决这种歧义。 谢谢!

2 个答案:

答案 0 :(得分:1)

不是将菜单分配给两个控件,而是使用控件上的右键单击事件来执行这样的函数

  • 将全局变量设置为指向刚刚单击的控件
  • 以鼠标坐标显示所需的菜单
  • 现在在您的copyNotesToClipboardStripMenu_Click方法中,您可以访问存储点击控件的全局变量

另外,请不要忘记在完成后将全局设置为null,并确保在使用时使用lock

答案 1 :(得分:0)

我发现一个适合我的结果

        private void copyNotesToClipboardStripMenu_Click(object sender, EventArgs e)
        {
            ToolStripMenuItem menuItem = sender as ToolStripMenuItem;
            if (menuItem != null)
            {
                ContextMenuStrip calendarMenu = menuItem.Owner as ContextMenuStrip;
                if (calendarMenu != null)
                {
                    Control controlSelected = calendarMenu.SourceControl;
                }
            }
        }

controlSelected 对象的属性名称包含已激活上下文菜单的控件名称。