【今更だけど】WPFでLostFocusのなかでFocusでフォーカスを戻すとループする

XXXX_LostFocus(object sender, System.EventArgs e)
{
if(XXXX.Text == “”)
{
MessageBox.Show(“未入力エラー”);
//フォーカスを戻し、再入力を促す。
XXXX.Focus();
return ;
}
}
とやると、メッセージボックスが消えた後にまた同じメッセージボックスが・・・メッセージボックスが・・・メッセージボックス・・・
となる。
//フォーカスを戻し、再入力を促す。
XXXX.Focus();
の代りに
//処理済とし、以後のイベントのルーティングが起きないようにする。
//⇒結果的にLostFocus()の次のGotFocus()の処理がされず、
//LostFocus()をキャンセルしたのと似たような効果を得られる。
e.Handled = true;
ハズだったけど、ダメだった
例えばボタンを押したのなら、ボタンの処理にも似たようなコード(e.Handled = true;)を入れないとダメだった。
こっちはちゃんとうまく処理してくれるので、そっちに任せた方がいいかもしれない。
ただキーボード操作でLostFocusした場合には
PreviewLostKeyboardFocusイベントで、KeyboardFocusChangedEventArgs e に対して同様な処理を入れるとうまく動くらしい。
もっともLostFocusは低レベルなイベントなので使わないようにってどこかに書いてあった気がする。




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA