Tar*_*ryn 81 .net c# contextmenustrip winforms
我有一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒.谢谢.
使用下面的帮助,我发现了:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Cod*_*ray 114
ContextMenu
:问题是sender
参数指向被单击的上下文菜单上的项目,而不是上下文菜单本身.
不过,这是一个简单的修复,因为每个都会MenuItem
公开一个GetContextMenu
方法,告诉你哪个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;
}
}
Run Code Online (Sandbox Code Playgroud)
ContextMenuStrip
:如果使用a ContextMenuStrip
而不是a,它确实会略微改变ContextMenu
.这两个控件彼此不相关,并且一个实例不能被转换为另一个的实例.
和以前一样,仍然在参数中返回被单击的项目sender
,因此您必须确定ContextMenuStrip
拥有此单个菜单项的项目.你这样做的Owner
财产.最后,您将使用该SourceControl
属性来确定哪个控件正在显示上下文菜单.
像这样修改你的代码:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我很难让任何这些代码工作。这是我能找到的最简单的解决方案:
Control _sourceControl = null;
private void contextMenuStrip_Opened(object sender, EventArgs e)
{
_sourceControl = contextMenuStrip.SourceControl;
}
private void contextMenuItem_Click(object sender, EventArgs e)
{
var menuItem = (ToolStripMenuItem)sender;
_sourceControl.Text = menuItem.Text;
MessageBox.Show(menuItem.Name);
MessageBox.Show(sourceControl.Name);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
45983 次 |
最近记录: |