在Winforms中,我想在用户右键单击ToolStripMenuItem时显示ContextMenuStrip。 例如(见下图),在Firefox中有Bookmarks菜单,当我们右键单击其中一个书签时,将显示一个上下文菜单项。
我们怎样才能在Windows窗体应用程序中执行此操作?
我知道我们可以将ContextMenuStrip与Control(例如Form)相关联,但问题是ToolStripMenuItem不是Control。
答案 0 :(得分:3)
创建自定义ContextMenuStrip并在处理ToolStripItem上的MouseUp事件时显示它,所以基本上是这样的:
toolStripLabel1.MouseUp += new System.Windows.Forms.MouseEventHandler(toolStripLabel1_MouseUp);
private void toolStripLabel1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
contextMenuStrip1.Show(Cursor.Position);
}
}
然后,您可以根据用户点击的菜单项显示不同的上下文菜单。
<强>更新强>
关于您的评论,如果您不希望在显示上下文菜单时取消菜单项,则可以遍历所有工具条菜单项并将AutoClose
属性设置为false
(和然后在显示上下文菜单后返回true
:
private void toolStripLabel1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
AutoCloseDropDowns(menuStrip1.Items, false);
contextMenuStrip1.Show(Cursor.Position);
AutoCloseDropDowns(menuStrip1.Items, true);
}
}
private void AutoCloseDropDowns(ToolStripItemCollection items, bool autoClose)
{
if (items != null)
{
foreach (var item in items)
{
var ts = item as ToolStripDropDownItem;
if (ts != null)
{
ts.DropDown.AutoClose = autoClose;
AutoCloseDropDowns(ts.DropDownItems, autoClose);
}
}
}
}