如何确定哪个控件被单击并出现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.Label是null
我做错了什么?建议我如何解决这种歧义。非常感谢。
不要将菜单分配给两个控件,而是使用控件上的右键单击事件来执行类似的功能
- 设置一个全局变量以指向刚刚单击的控件
- 在鼠标坐标处显示所需的菜单
- 现在,在
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包含已激活上下文菜单的控件的名称。