gpt4 book ai didi

c# - 确定在哪个控件上使用了 ContextMenuStrip

转载 作者:IT王子 更新时间:2023-10-29 03:39:13 28 4
gpt4 key购买 nike

我有一个分配给几个不同列表框的 ContextMenuStrip。我试图弄清楚什么时候 ContextMenuStrip 被点击,它被用在什么 ListBox 上。我尝试了下面的代码作为开始,但它不起作用。 sender 具有正确的值,但当我尝试将其分配给 menuSubmitted 时,它为空。

private void MenuViewDetails_Click(object sender, EventArgs e)
{
ContextMenu menuSubmitted = sender as ContextMenu;
if (menuSubmitted != null)
{
Control sourceControl = menuSubmitted.SourceControl;
}
}

任何帮助都会很棒。谢谢。

借助下面的帮助,我弄明白了:

private void MenuViewDetails_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;
}
}
}

最佳答案

对于 ContextMenu:

问题是 sender 参数指向被单击的上下文菜单上的 item,而不是上下文菜单本身。

不过,这是一个简单的修复,因为每个 MenuItem 都公开一个 GetContextMenu method这将告诉您哪个 ContextMenu 包含该菜单项。

将您的代码更改为以下内容:

private void MenuViewDetails_Click(object sender, EventArgs e)
{
// Try to cast the sender to a MenuItem
MenuItem menuItem = sender as MenuItem;
if (menuItem != null)
{
// Retrieve the ContextMenu that contains this MenuItem
ContextMenu menu = menuItem.GetContextMenu();

// Get the control that is displaying this context menu
Control sourceControl = menu.SourceControl;
}
}

对于 ContextMenuStrip:

如果您使用 ContextMenuStrip 而不是 ContextMenu,它确实会稍微改变一些事情。这两个控件彼此不相关,一个实例不能转换为另一个实例。

和以前一样,被点击的 item 仍然在 sender 参数中返回,所以你必须确定拥有的 ContextMenuStrip这个单独的菜单项。你用 Owner property 做到这一点.最后,您将使用 SourceControl property以确定哪个控件正在显示上下文菜单。

像这样修改你的代码:

private void MenuViewDetails_Click(object sender, EventArgs e)
{
// Try to cast the sender to a ToolStripItem
ToolStripItem menuItem = sender as ToolStripItem;
if (menuItem != null)
{
// Retrieve the ContextMenuStrip that owns this ToolStripItem
ContextMenuStrip owner = menuItem.Owner as ContextMenuStrip;
if (owner != null)
{
// Get the control that is displaying this context menu
Control sourceControl = owner.SourceControl;
}
}
}

关于c# - 确定在哪个控件上使用了 ContextMenuStrip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4886327/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com