如何确定哪个控件被单击并出现contextMenuStrp

本文关键字:contextMenuStrp 单击 何确定 控件 | 更新日期: 2023-09-27 18:25:36

我已经为两个ListBox控件的同一上下文菜单属性分配了一个contextMenuStrip。我想确定他们中的哪一个激活了上下文菜单。因为我必须根据运行时单击的控件来更改一些条目。

        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
            }              
        }

当我读到另一篇文章时,它应该是Label属性中单击的控件的名称。

我看到cntrl.Labelnull

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

如何确定哪个控件被单击并出现contextMenuStrp

不要将菜单分配给两个控件,而是使用控件上的右键单击事件来执行类似的功能

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

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

我发现一个结果对我来说很好

        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对象的属性Name包含已激活上下文菜单的控件的名称。