菜单项突出显示时发生的事件

2023-12-31

有谁知道每当突出显示菜单项时就会触发一个事件?

我想在状态栏中显示每个菜单命令突出显示的描述。无论是使用鼠标还是键盘突出显示它们,我都希望发生这种情况。

但经过相当多的努力,我没有看到任何类似的事件。我什至尝试覆盖WndProc检测原始菜单消息但发现没有发送。显然,WinForms 不使用标准的 Windows 菜单。

似乎知道菜单项何时被点击以及何时被选择(突出显示而不被点击)应该是两个最重要的菜单事件。我不知道为什么后者不被支持。

有人能弄清楚这一点吗?

UPDATE

在此处给出的答案的帮助下,我能够想出一个完整的解决方案。我已经将该解决方案作为开源发布在NuGet https://www.nuget.org/packages/SoftCircuits.MenuStatus and GitHub https://github.com/SoftCircuits/SoftCircuits.MenuStatus.


除了鼠标事件之外,您还可以通过处理来添加键盘按键部分KeyUp所有者菜单的事件以获取所选项目并在状态栏标签中显示说明。

public YourForm()
{
    InitializeComponent();

    menuStrip1.ShowItemToolTips = false;
    menuStrip1.KeyUp += OnToolStripKeyUp;

    foreach (var item in GetAllToolStripItems(menuStrip1.Items))
    {
        item.AutoToolTip = false;
        item.MouseEnter += OnToolStripItemMouseEnter;
        item.MouseLeave += OnToolStripItemMouseLeave;

        if (item.GetCurrentParent() is ToolStrip dm)
        {
            dm.ShowItemToolTips = false;
            dm.KeyUp -= OnToolStripKeyUp;
            dm.KeyUp += OnToolStripKeyUp;
        }
    }
}

private void OnToolStripItemMouseEnter(object sender, EventArgs e)
{
    sbrLabel.Text = (sender as ToolStripItem).ToolTipText;
}

private void OnToolStripItemMouseLeave(object sender, EventArgs e)
{
    sbrLabel.Text = "Ready";
}

private void OnToolStripKeyUp(object sender, KeyEventArgs e)
{
    var s = sender as ToolStrip;
    var selItem = s.Items.OfType<ToolStripMenuItem>().FirstOrDefault(x => x.Selected);

    sbrLabel.Text = selItem?.ToolTipText;
}

private IEnumerable<ToolStripItem> GetAllToolStripItems(ToolStripItemCollection tsic)
{
    foreach (var tsi in tsic.Cast<ToolStripItem>())
    {
        yield return tsi;

        if (tsi is ToolStripDropDownItem tsddi && tsddi.HasDropDown)
            foreach (var ddi in GetAllToolStripItems(tsddi.DropDownItems))
                yield return ddi;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

菜单项突出显示时发生的事件 的相关文章

随机推荐

  • 如何使动态创建的div可编辑

    我要实现div创建的可编辑动态地 这也是可拖动的 div 这就是我尝试过的 1 divid attr contentEditable true 2 divid live click function this click contentEd
  • 获取 glFrustum 的坐标

    我刚刚开始阅读有关OpenGL主题 特别是关于Viewing http glprogramming com red chapter03 html以满足我目前的需求 我试图理解glFrustum根据我的理解 对我在屏幕上绘制的对象进行透视投影
  • 从 JVM 上的堆栈帧获取局部变量

    有没有办法在不使用调试器的情况下在 JVM 上获取当前范围内的局部变量的映射或其他数据结构 即获取当前栈帧的局部变量 我知道有堆栈跟踪对象 但是StackTraceElement无法访问任何状态 它只是告诉您在哪里调用了什么方法 但不告诉您
  • 无法设置 Content-Type 标头

    我在 HttpClient 上设置 Content Type 时遇到问题 我沿着这个问题 如何为 HttpClient 请求设置 Content Type 标头 https stackoverflow com questions 10679
  • 计算机编程艺术中approximateEqual和essentialEqual的区别

    我从其他地方得到这个代码片段 据站长介绍 代码摘自 由于我没有那本书 请问这两个函数有什么区别 bool approximatelyEqual float a float b float epsilon return fabs a b lt
  • C# 接口和 Haskell 类型类之间的区别

    我知道这里有一个类似的问题 但我想看一个例子 它清楚地表明 你不能做什么interface并且可以使用 Type Class 为了进行比较 我给你一个示例代码 class Eq a where a gt a gt Bool instance
  • 如何在Python中使用pdfminer从在线PDF中提取文本

    我想使用 pdfminer 使用下面的代码从在线 PDF 中提取文本 它没有显示错误 但输出什么也没有 from pdfminer pdfpage import PDFPage from urllib import request from
  • 如何在 Android 中将文件上传到 Cloudinary 时显示进度?

    我实现了将文件上传到Cloudinary的功能 Cloudinary cloudinary new Cloudinary Constants CLOUDINARY URL try FileInputStream is new FileInp
  • Python - Windows - 当“不相关”父进程死亡/崩溃时退出子进程

    经过一番研究后 对于如何让子进程了解父进程在 Windows 下已死亡 崩溃 退出这可以使子进程在无人值守的情况下运行 没有明确的答案 有一些建议如下 Jobs Python 当父进程死亡时如何杀死子进程 https stackoverfl
  • 如何更改 ListView 项目在焦点和单击时的颜色

    我的应用程序中有一个列表视图 这是 xml 布局
  • 日期上的 Asp.net LINQ groupby 和 orderBy 未检索预期输出

    我正在使用 linq2sql 开发 asp net mvc3 应用程序 我有一个 SiteLog 对象类型列表 其中还包含每个对象 名为 CLRExceptionType 的字符串和名为 EntryDate 的日期 该列表包含在字典中 pr
  • Python Kivy不会使用SDL2,坚持使用pygame

    我努力做Kivy https kivy org 1 11 0 使用SDL2 on 乌班图18 04桌面 它不断要求pygame但这已被弃用 我不想将其用于新项目 在全新的Ubuntu 18 04 虚拟机这就是我所做的 sudo apt in
  • 许多 URI 语法中“://”的起源 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 谁都知道 或者 来自大多数 URI 语法 例如 为什么不写成 http www example com a1kmm 的答案对于 URL 的特定应用很有
  • IIS AppPoolIdentity 和文件系统写入访问权限

    这是 IIS 7 5 和 ASP NET 的一个问题 我一直在研究但毫无进展 任何帮助将不胜感激 我的问题是 在 IIS 7 5 中使用 ASP NET IIS 和 或操作系统如何允许 Web 应用程序写入类似的文件夹C dump在完全信任
  • iphone NavigationController 清除视图堆栈

    我有一个使用导航控制器的 iPhone 应用程序 在该控制器中我推送了一些视图 在某些情况下 我想 清除 视图堆栈 只保留堆栈中导航控制器的 rootViewController 并推送我拥有的另一个 viewController 有人可以
  • 在 ionic 2 中使用 nav.push 和侧面菜单

    我尝试制作一个小应用程序ionic2了解它 但我在导航方面遇到问题 事实上我很清楚a之间的区别rootpage 换成白色nav setRoot 和一个 正常 页面 添加nav push 问题是对于我的应用程序 我需要能够打开侧面菜单 如果我
  • Sonarqube 针对特定产品风格和构建类型运行(gradle 插件)

    目前 我们在针对特定构建变体运行 sonarqube 时遇到问题 例如clienttestDebug 我们的结构是这样的 我们有 3 种不同的构建类型 Release Debug Profile 并拥有多种 超过30种 产品口味 例如 pr
  • 原始音频数据流传输过程中网络音频播放出现裂纹

    我有一台服务器通过网络套接字发送原始音频块 我们的想法是检索这些内容并以尽可能流畅的播放方式播放它们 这是最重要的一段代码 ws onmessage function event var view new Int16Array event
  • Java 中数组初始值设定项内带有尾随逗号的数组

    数组初始值设定项可用于在编译时初始化数组 如下所示带有尾随逗号的初始值设定项可以正常编译 int a 1 2 3 4 5 6 Trailing commas cause no compiler error for int i 0 i
  • 菜单项突出显示时发生的事件

    有谁知道每当突出显示菜单项时就会触发一个事件 我想在状态栏中显示每个菜单命令突出显示的描述 无论是使用鼠标还是键盘突出显示它们 我都希望发生这种情况 但经过相当多的努力 我没有看到任何类似的事件 我什至尝试覆盖WndProc检测原始菜单消息