使用LinkLabel控件的键盘快捷键

时间:2009-03-25 04:00:51

标签: c# winforms keyboard-shortcuts linklabel

我注意到在标准.NET WinForms表单中分配给linklabel控件的键盘快捷键无效。

我创建了一个LinkLabel控件实例,并将Text属性指定为“Select& All”。对于大多数控件(标签,按钮,单选按钮等),这将导致 Alt + A 成为触发默认事件(Clicked)的指定键盘快捷键。 LinkLabel没有发生这种情况(虽然它可以用于其他控件)

  • 我已经确认键盘快捷键不重复。
  • 我已检查快捷方式是否设置焦点而不是触发Clicked。焦点保持不变。
  • 我已验证UseMnemonic属性设置为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 个答案:

答案 0 :(得分:9)

我认为这只是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;
  }
}