7

標準の .NET WinForms フォームで linklabel コントロールに割り当てられたキーボード ショートカットが機能していないことに気付きました。

LinkLabel コントロール インスタンスを作成し、Text プロパティを "Select &All" に割り当てました。ほとんどのコントロール (ラベル、ボタン、ラジオ ボタンなど) では、これによりAlt+Aが指定されたキーボード ショートカットになり、既定のイベント (クリック) がトリガーされます。これは LinkLabel では発生していません (ただし、他のコントロールでは正常に機能しています)。

  • キーボード ショートカットが重複していないことを確認しました。
  • Clicked をトリガーするのではなく、ショートカットがフォーカスを設定しているかどうかを確認しました。こだわりは変わらず。
  • UseMnemonic プロパティが true に設定されていることを確認しました。

何か案は?


解決

チャーリーさん、正しい答えをありがとう。まさに私が必要としていたもの。このコード スニペットはそのままではコンパイルできないため、わずかな変更を加えました。ではなく、構造パラメータとして aLinkLabelLinkClickedEventArgsが必要です。LinkLabel.LinkLinkLabel

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;
    }
}
4

1 に答える 1

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;
  }
}
于 2009-03-25T04:14:21.727 に答える