我有Window Forms应用程序,我使用ToolStripDropDown作为表单的上下文菜单。
public partial class Form1 : Form
{
ToolStripDropDownMenu _formContextMenu = null;
public Form1()
{
InitializeComponent();
_formContextMenu = new ToolStripDropDownMenu();
_formContextMenu.Items.Add("Item1");
_formContextMenu.Items.Add("Item2");
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
_formContextMenu.Show(e.Location);
}
else
base.OnMouseDown(e);
}
protected override void OnResize(EventArgs e)
{
_formContextMenu.Close();
base.OnResize(e);
}
}
首先,我点击右键鼠标按钮显示上下文菜单。之后我按下Win + D(最小化所有窗口),然后再次打开我的应用程序。上下文菜单保持打开状态,单击表单时也不会关闭。我甚至可以将表格移到其他地方,但它仍然会保持打开状态。 我也试图以不同的理由关闭它。
_formContextMenu.Close(ToolStripDropDownCloseReason.AppClicked);
_formContextMenu.Close(ToolStripDropDownCloseReason.AppFocusChange);
_formContextMenu.Close(ToolStripDropDownCloseReason.CloseCalled);
_formContextMenu.Close(ToolStripDropDownCloseReason.ItemClicked);
_formContextMenu.Close(ToolStripDropDownCloseReason.Keyboard);
没有帮助。 有人可以帮忙解决这个问题吗?
答案 0 :(得分:1)
我使用此解决方法来解决问题并且它正常运行:
protected override void OnSizeChanged(EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
//_formContextMenu or this.contextMenuStrip1
this.contextMenuStrip1.Visible = true;
this.contextMenuStrip1.Close();
}
base.OnSizeChanged(e);
}
虽然ContextMenuStrip
也出现此问题,但如果没有使用ToolStripDropDownMenu
的特定目标,则可以使用表单的ContextMenuStrip
组件和设置ContextMenuStrip
属性。这样您就不需要编写代码来显示上下文菜单。
但如果出于任何原因您希望在代码中显示,请考虑以这种方式显示上下文菜单/下拉菜单:yourContextMenu.Show(this,e.Location);