studio Odyssey




スタジオ日誌

日誌的なもの

2010.12.17

ToolStripControlHostの中に入れたButtonのアクセラレーターキー

Written by
しゃちょ
Category
C#

 .netプログラミングの話。

 ToolStripControlHostの中に入れたButtonのアクセラレーターキーは、ToolStripに入っていると、フォーカスのあるコントロールのValidating等のイベントが起こらない。

 考えてみれば当たり前なのだが、マウスクリックだとフォーカス移動が発生するので、起こるんだよねー。なかなか気づかない。

 どうすればいいのかというと、

protected override bool ProcessMnemonic(char charCode)
{
   if (this.CausesValidation && System.Windows.Forms.Control.IsMnemonic(charCode, this.Text))
   {
      this._defaultButton.PerformClick();
      return true;
   }
   return base.ProcessMnemonic(charCode);
}

 こんな感じに、ProcessMnemonicをオーバーライドして、処理してあげればいい。_defaultButtonは、ホストされているコントロールね。

 PerformClickも同様なので、必要であればnew で再定義して、同じようにホストされている側を直接呼んであげればいい。

 なかなか気づかないよなー。普通のボタンなら、ちゃんと起こるし。


トラックバックURL

http://blog.studio-odyssey.net/cgi-bin/mt/mt-tb.cgi/593


コメントする