- 題名: WPFでtextBoxのLostFocusでFocus()すると無限ループ?
- 日時: 2014/04/01 15:05:38
- ID: 32224
- この記事の返信元:
- (なし)
- この記事への返信:
- [32225] Re[1]: WPFでtextBoxのLostFocusでFocus()すると無限ループ?2014/04/01 16:24:11
- ツリーを表示
■No32224に返信(hiroさんの記事)
> WPFで教えてください。
> テキストボックスに入力した文字数などが正しくない時、
> 再入力を促すために同じテキストボックスにフォーカスを当てて文字を選択状態にしたいのですが、
> 下記のようにすると無限ループに陥ります。
メッセージボックスを出した時にもLostFocusイベントが発生するからでしょう。
別のイベントでやる必要があると思います。
> どのようにコードを書くべきでしょうか?教えてください。
LostFocusではなくPreviewLostKeyboardFocusでやるとできそうです。
また合わせて元のコントロールにフォーカスを再設定するのではなく、
フォーカスの移動をe.Handled = true;にてキャンセルすれば良いようです。
private void textBox4_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
if (textBox4.Text.Length != 4)
{
MessageBox.Show("受付番号が、4ケタではありません。");
textBox4.SelectAll();
//textBox4.Focus();
e.Handled = true;
return;
}
}
当方、WPFでの開発はなく、試し遊び程度なスキルなのでもっと良い方法があるかもしれません。
「Focus」のつくイベントを一通り試してみることをお勧めします。
というより、LostFocus&Focus設定の処理は何かと面倒な事になりかねないので、
根本的にはお勧めしませんが・・・。
http://social.msdn.microsoft.com/Forums/ja-JP/86b8326f-58cd-414d-a25c-f9e002f79f65
この辺でも指摘されています。
# MS2010?VS2010のこと?
分類:[.NET]
お世話になります。
WPFで教えてください。テキストボックスに入力した文字数などが正しくない時、再入力を促すために同じテキストボックスにフォーカスを当てて文字を選択状態にしたいのですが、下記のようにすると無限ループに陥ります。
どのようにコードを書くべきでしょうか?教えてください。
private void textBox4_LostFocus(object sender, RoutedEventArgs e)
{
if (textBox4.Text.Length != 4)
{
MessageBox.Show("受付番号が、4ケタではありません。");
textBox4.SelectAll();
textBox4.Focus();
return;
}
:
: