winforms 我怎样才能停止从删除自己选择一个项目时ToolStripMenuItem下拉菜单?

50few1ms  于 2023-05-29  发布在  其他
关注(0)|答案(2)|浏览(143)

我的menuStrip中的ToolStripMenuItem包含了我的DropDown表中的所有列,我可以选择隐藏/取消隐藏,但每次我想这样做时,我都必须重新打开下拉列表(单击项目)。是否有设置允许此菜单在从中选择一个项目后仍然存在?
我计划在Dropdown上只在鼠标悬停在它理想的位置时关闭,或者当我的窗口中的另一个控件被选中时(我假设是Lose Focus事件)。
我实现了第一个答案,但每次选择一个项目时,它都会有一个非常明显的 Flink :

我尝试修复它的第一种方法涉及禁用item.DropDown.AutoClose,但这引入了什么事件触发AutoClose的问题,因此我可以重新实现我想要的事件。我尝试了MouseLeaveLoseFocus事件,但我似乎无法让它们以可靠的方式为此目的工作。(阅读我对第一个答案的回答)

dddzy1tm

dddzy1tm1#

您可以编写一个方法,以编程方式重新打开菜单条项,并从按钮单击事件调用该方法。
以下是这种方法示例:

private void OpenDropDown(int dropindex = 0)
{
    ToolStripDropDownItem item = menuStrip1.Items[dropindex] as ToolStripDropDownItem;

    if (item.HasDropDownItems)
    {
        // Re-openes the menustrip item
        item.ShowDropDown();
    }
}
x0fgdtte

x0fgdtte2#

您可以使用OnDropDownClosing事件。将此处理程序添加到您希望单击的所有项目,但菜单应保持打开状态。

private static void OnDropDownClosing(object sender, ToolStripDropDownClosingEventArgs e)
{
    if (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked)
        e.Cancel = true;
}

相关问题