代码之家  ›  专栏  ›  技术社区  ›  Simon Gillbee

使用带有LinkLabel控件的键盘快捷键

  •  7
  • Simon Gillbee  · 技术社区  · 15 年前

    我注意到,在标准的.NET WinForms表单中,分配给linklabel控件的键盘快捷键不起作用。

    我创建了一个LinkLabel控件实例,并将Text属性指定为“Select&All”。对于大多数控件(标签、按钮、单选按钮等),这会导致 中高音 + A. 成为触发默认事件的指定键盘快捷键(单击)。LinkLabel不会出现这种情况(尽管它对其他控件正常工作)

    • 我已确认键盘快捷键不是重复的。
    • 我已经检查了快捷方式是否是设置焦点而不是触发单击。重点保持不变。
    • 我已验证UseMemonic属性是否设置为true。

    有什么想法吗?


    解决方案

    查理,谢谢你的正确答案。正是我需要的。我做了一点小小的修改,因为这个代码片段不能按原样编译。 LinkLabelLinkClickedEventArgs 需要一个 LinkLabel.Link 作为构造参数,而不是 LinkLabel .

    class LinkLabelEx : LinkLabel
    {
        protected override bool ProcessMnemonic(char charCode)
        {
            if (base.ProcessMnemonic(charCode))
            {
                if (this.Links.Count == 0)
                    return false;
                OnLinkClicked(new LinkLabelLinkClickedEventArgs(this.Links[0]));
                return true;
            }
            return false;
        }
    }
    
    1 回复  |  直到 9 年前
        1
  •  9
  •   Charlie    15 年前

    我相信这只是LinkLabel的一个缺点;当您使用它的助记符时,它不会生成单击事件。但是,我使用了以下代码作为变通方法,取得了良好的效果:

    class BetterLinkLabel : LinkLabel
    {
      protected override bool ProcessMnemonic( char charCode )
      {
        if( base.ProcessMnemonic( charCode ) )
        {
          // TODO: pass a valid LinkLabel.Link to the event arg ctor
          OnLinkClicked( new LinkLabelLinkClickedEventArgs( null ) );
          return true;
        }
        return false;
      }
    }