获取 DropDownMenu 的 SourceControl
Get the SourceControl of a DropDownMenu
我在 ContextMenuStrip 中有两个菜单项的点击事件。
我可以通过执行以下代码获取单击的上下文菜单项的 SourceControl:
Control c = ((sender as ToolStripItem).Owner as ContextMenuStrip).SourceControl;
但是当我在另一个级别的上下文菜单项上使用此代码时,returns null。
如何在第二张截图的菜单项的点击事件中获取SourceControl?
ContextMenuStrip SourceControl (the reference of the current Control where the Context Menu is activated) can be retrieved, from a ToolStripMenuItem, inspecting the OwnerItem reference and moving upstream until the OwnerItem
reference is null
, then inspecting the Owner 值,它引用 ContextMenuStrip
。
(不幸的是,SourceControl
引用仅在 ContextMenuStrip
控件中可用。
一种简单的替代方法是使用 Field
引用 Control
,其中当前 ContextMenuStrip
已被激活(您可以只有一个激活的 ContextMenuStrip
)。
此字段引用在 ContextMenuStrip
打开时设置 - 通过订阅 Opened()
事件 - 然后可以由任何 ToolStripMenuItem
.
访问
然后,当 ContextMenuStrip
关闭时,字段引用将设置回 null
。
▶ 表单关闭时处理 contextMenuOwner
对象。
一个例子:
(toolStripMenuItem
为通用名,必须设置为实际控件名)
Control contextMenuOwner = null;
private void toolStripMenuItem_Click(object sender, EventArgs e)
{
contextMenuOwner?.BackColor = Color.Blue;
//(...)
}
private void contextMenuStrip1_Opened(object sender, EventArgs e)
{
contextMenuOwner = (sender as ContextMenuStrip).SourceControl;
}
private void contextMenuStrip1_Closed(object sender, ToolStripDropDownClosedEventArgs e)
{
contextMenuOwner = null;
}
我在 ContextMenuStrip 中有两个菜单项的点击事件。
我可以通过执行以下代码获取单击的上下文菜单项的 SourceControl:
Control c = ((sender as ToolStripItem).Owner as ContextMenuStrip).SourceControl;
但是当我在另一个级别的上下文菜单项上使用此代码时,returns null。
如何在第二张截图的菜单项的点击事件中获取SourceControl?
ContextMenuStrip SourceControl (the reference of the current Control where the Context Menu is activated) can be retrieved, from a ToolStripMenuItem, inspecting the OwnerItem reference and moving upstream until the OwnerItem
reference is null
, then inspecting the Owner 值,它引用 ContextMenuStrip
。
(不幸的是,SourceControl
引用仅在 ContextMenuStrip
控件中可用。
一种简单的替代方法是使用 Field
引用 Control
,其中当前 ContextMenuStrip
已被激活(您可以只有一个激活的 ContextMenuStrip
)。
此字段引用在 ContextMenuStrip
打开时设置 - 通过订阅 Opened()
事件 - 然后可以由任何 ToolStripMenuItem
.
访问
然后,当 ContextMenuStrip
关闭时,字段引用将设置回 null
。
▶ 表单关闭时处理 contextMenuOwner
对象。
一个例子:
(toolStripMenuItem
为通用名,必须设置为实际控件名)
Control contextMenuOwner = null;
private void toolStripMenuItem_Click(object sender, EventArgs e)
{
contextMenuOwner?.BackColor = Color.Blue;
//(...)
}
private void contextMenuStrip1_Opened(object sender, EventArgs e)
{
contextMenuOwner = (sender as ContextMenuStrip).SourceControl;
}
private void contextMenuStrip1_Closed(object sender, ToolStripDropDownClosedEventArgs e)
{
contextMenuOwner = null;
}