我有 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);
没有帮助。 有人可以帮助解决这个问题吗?
最佳答案
我使用了这个解决方法来解决这个问题并且它工作正常:
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);
关于c# - ToolStripDropDownMenu 在表单最小化和恢复后保持打开状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34022236/