【问题标题】:How to capture HotKeys (accelerators) messages in a button如何在按钮中捕获热键(加速器)消息
【发布时间】:2011-12-21 13:11:26
【问题描述】:

我正在实现一个继承自System.Windows.Forms.Button 的自定义Button 类,我对按钮进行自定义绘制,包括按钮文本。我想为我的按钮支持加速键(热键)。

小解释:在标准按钮中,当按下 ALT 键时,加速字符会加下划线:

  button.Text = "&Capture screen";

当您在应用程序中按 ALT 键 时,按钮会在“C”字符下划线。

因此,当我绘制按钮文本时,我需要知道加速器下划线何时处于活动状态,以绘制带下划线的文本。

  • 如何订阅接收加速器消息?
  • 是事件吗?
  • 是 WND_PROC 消息吗?
  • 是否有托管代码来获取它?

提前致谢。

【问题讨论】:

  • @HansPassant:看来这个属性是用来知道控件是否必须绘制焦点矩形的。这与热键下划线有什么关系?
  • 糟糕,制作 ShowKeyboardCues。

标签: .net winforms button


【解决方案1】:

如果您想检测按钮的 Paint 事件处理程序中是否按下了 Alt 键,您可以检查表单的 ModifierKeys 属性:

    private void button1_Paint(object sender, PaintEventArgs e)
    {
        if (ModifierKeys == Keys.Alt)
            button1.Text = "Alt Pressed - " + button1.Text;
    }

【讨论】:

  • 是的,但我真正需要的是当热键 UI 被激活时会出现一些东西。我需要 Invalidate() 控件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 2015-07-11
  • 1970-01-01
  • 2021-11-06
  • 2011-06-30
相关资源
最近更新 更多