自动隐藏 MenuStrip - 显示时如何激活它?

2023-12-29

I have a MenuStrip and I make it AutoHide using following code. It hides/shows prefect but when a control get focus, by pressing Alt key, MenuStrip shows but it is not active and there is not small underline under shortcut keys for example under 'F' for File , and pressing 'F' will not open it). How can I correctly active it?

注:我用过MenuDeactivate相反,它但效果不佳。

bool menuBarIsHide = true;
bool altKeyIsDown = false;
bool alwaysShowMenuBar=false;
//KeyPreview is true;
//for prevent glitch(open/close rapidly)
void Form1_KeyUp(object sender, KeyEventArgs e)
{
    if ((Control.ModifierKeys & Keys.Alt) != 0)
        altKeyIsDown = false;
}
void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if ((Control.ModifierKeys & Keys.Alt) != 0)
    {
        if (altKeyIsDown)
            return;
        if (!alwaysShowMenuBar)
        {
            if (menuBarIsHide)
            {
                menuBar.Show();
                menuBarIsHide = false;
                //manage container height
            }
            else
            {
                menuBar.Hide();
                menuBarIsHide = true;
                //manage container height
            }
        }
    }
}

You can override to handle Alt key to toggle the menu visibility. Also to activate menu, call internal OnMenuKey method of MenuStrip. Also handle to make the menu invisible after finishing your work with menu, but you need to make the menu invisible using .

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == (Keys.Alt | Keys.Menu))
    {
        if (!this.menuStrip1.Visible)
        {
            this.menuStrip1.Visible = true;
            var OnMenuKey = menuStrip1.GetType().GetMethod("OnMenuKey", 
                System.Reflection.BindingFlags.NonPublic | 
                System.Reflection.BindingFlags.Instance);
            OnMenuKey.Invoke(this.menuStrip1, null);
        }
        else
        {
            this.menuStrip1.Visible = false;
        }
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}
private void menuStrip1_MenuDeactivate(object sender, EventArgs e)
{
    this.BeginInvoke(new Action(() => { this.menuStrip1.Visible = false; }));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动隐藏 MenuStrip - 显示时如何激活它? 的相关文章

随机推荐

  • Panda时间序列重采样+线性调整值

    使用 python 和 pandas 如何将时间序列重新采样为 5 分钟间隔 偏移量 整个小时的零分钟 同时线性调整值 因此 我想改变这一点 value 00 01 2 00 05 10 00 11 22 00 14 28 进入这个 val
  • 使用 Java 8 日期时间 API 时如何将 AM/PM 符号更改为我自己的字母表

    我们有一个应用程序 我们接受客户的日期时间格式 我们最近开始迁移到 Java 8 新的日期时间 API 因为它们是线程安全的 看下面的代码 您可以看到在准备格式化程序之前 我们将 A 和 P 设置为 AM 和 PM 字符串 我们从客户那里获
  • 想要在嵌入标准 C# 应用程序的 WebBrowser 控件中启用 BHO

    我有一个标准的 winforms C 应用程序 其中拖有一个网页浏览器控件 我们还有一个 C BHO 当它在 IE7 或 IE8 中运行时 我们通常通过 COM 与之交互 我没有看到任何方法告诉 web 浏览器控件加载 BHO BHO 不显
  • 如何禁用解析作为 url 参数/从 url 传递的登录参数

    应用程序记录所有请求urls 这意味着 不要使用 url 参数进行身份验证 因为这会导致日志充满对的情况 login abc password 123 为此我配置了spring security从中读取参数request body 这是通过
  • Google Picker - 将文件 ID 返回到我的 Google 脚本

    我有一个相当基本的电子表格 它使用一些 Google 脚本来完成各种任务 我试图为最终用户清理界面 并决定实施 Google Picker 最初 用户必须手动将 CSV 导入到电子表格中 这里的新目标是通过 Google Picker 选择
  • TensorFlow:tf.summary.text 和换行符

    如何使用 tf summary text 发出包含换行符的文本 我尝试过更换 n with br 但我无法让输出显示正确的换行符 如果没有正确的换行符 则很难读取 yaml 输出 如下所示 张量板text使用 Markdown 格式 尽管它
  • 如何使用spring data jpa连接从多个实体返回对象?

    我有三个实体 EntityA EntityB 和 EntityC 我需要使用 spring data jpa 从这些实体中将连接查询的值获取到对象列表中 查询是 select x id x formNo x name z testScore
  • 用约翰·梅杰的等式重写

    约翰 梅杰的等式带有以下重写引理 Check JMeq ind r JMeq ind r forall A Type x A P A gt Prop P x gt forall y A JMeq y x gt P y 很容易将其概括为 Le
  • 编码的 UI 测试_C#_manual_intervention

    我想通过键盘或鼠标交互来干预 C 中编码的 UI 测试的执行 例如 我想通过按 Tab 键暂停测试 并在再次按 Tab 键时继续测试 预先非常感谢您 由于您在评论中提到您想要暂停测试以便在计算机上执行其他操作 因此我同意 Coding Na
  • QueryOver API OrderBy 使用案例

    如何使用 QueryOver API 执行以下 LINQ to NHibernate 查询 这会从数据库中获取 Item 的所有记录的列表 并将状态为 Returned 的 Item 放置到列表的末尾 状态是一个枚举 映射到数据库中的 nv
  • 使用 jstl 获取明天的日期

    我尝试了以下方法来获取 JSTL 中明天的日期
  • 如何从文件系统加载任意 java .class 文件并对其进行反映?

    我想制作一个命令行实用程序 它根据外部类文件的反射执行一些操作 我将传递 class 文件或源文件的路径 可能是通配符 在执行过程中的某个时刻 我需要获取每个类的 Class 对象 而事先不知道它们的包名称 要做到这一点需要什么 我可以看什
  • 如何在 Blender 中将 IK 中的骨骼烘焙(转换)为 FK

    如何在 Blender 中将 IK 反向运动学 转换为 FK 正向运动学 我正在尝试将具有骨骼动画的模型导出到 THREE js 但是 它不支持 IK 因此 我需要将所有骨骼转换为FK 有谁知道有什么解决办法吗 谢谢 节日快乐 我发现 Ba
  • plot.lm():提取诊断 Q-Q 图中标记的数字

    对于下面的简单示例 您可以看到在随后的图中标识了某些点 如何提取这些图中识别的行号 尤其是正态 Q Q 图 set seed 2016 maya lt data frame rnorm 100 names maya 1 lt a maya
  • 删除 6 个月前的文件

    我想使用 Msbuild 删除文件夹中超过 6 个月前的文件 超过 6 个月的文件 我想使用 MsBuild 的 ModifiedTime 众所周知的项目元数据 我不喜欢使用自定义任务 只使用 msbuild 默认值和 Microsoft
  • Maven 寻找错误的原型包装

    我成功创建了一个原型 该原型在我公司的 Nexus 中引用 目录看起来结构良好 但是当我尝试从这个原型生成一个项目时 maven 将寻找一个 jar 并且我的原型被打包为 maven archetype 请参阅 下面的堆栈跟踪 INFO a
  • 使用python读取条形码

    我想用 python 读取条形码 我搜索了支持条形码读取并且也支持python 2 7的库 但我没有找到任何东西 有什么图书馆可以帮助我吗 另外 如果您知道有关条形码读取的任何教程 请告诉我在哪里可以找到 迟到总比不到好 Pyzbar ht
  • C# WPF DataGrid 不显示 SQLite 3 数据库中的小数

    我遇到了 C WPF 的问题 我想在 WPF DataGrid 控件中显示一些 SQLite 数据表 我们将产品的价格存储为 NUMERIC 但也尝试将其存储为 REAL 但效果完全相同 但在数据网格控件中 它显示为整数 尽管在 SQLit
  • libgdx 显示西里尔字母

    我在 libgdx 显示西里尔文时遇到以下问题 我举个例子 这有效 System out println 但它什么也没显示 field new TextField style 并尝试过但没有成功 try mmm new String t g
  • 自动隐藏 MenuStrip - 显示时如何激活它?

    I have a MenuStrip and I make it AutoHide using following code It hides shows prefect but when a control get focus by pr