2010.12.17
.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 で再定義して、同じようにホストされている側を直接呼んであげればいい。
なかなか気づかないよなー。普通のボタンなら、ちゃんと起こるし。
コメントする