SOについて同様の質問をいくつか見ましたが、実際に問題に対処しているようには見えません。これが関数の簡略化されたバージョンです。
Private Sub Check_Quantity(sender As System.Object, e As System.Windows.RoutedEventArgs) _
Handles textbox_quantity.LostFocus
Dim worked As Boolean = Integer.TryParse(textbox_quantity.Text, quantity)
If Not worked Then
MsgBox("Enter a valid number for the quantity")
textbox_quantity.Focus()
textbox_quantity.SelectAll()
quantity = 0
End If
End Sub
これはWPFであることに注意することが重要です。私がやりたいことはとても簡単です。誰かがテキストボックスを使い終えると、プログラムは入力したものが数字であることを確認します。もしそうなら、これを整数で固定します。そうでない場合は、修正するように指示し、テキストボックスにフォーカスを保ちます。問題はいくつかありますが、結局のところ、この関数は無限ループで実行されます。この同じ関数はWinFormsでは正常に機能しますが、WPFでは機能しません。
他のいくつかの質問では、メッセージボックスが表示されるとフォーカスが失われると言われていますが、テストではこれは正しくありません。メッセージボックスが呼び出されたかどうかに関係なく、ループします。問題は、textbox_quantity.Focus()の呼び出しです。それがなくても問題なく動作します。textbox_quantity.Focus()はtrueの値を返しますが、そこにあるかどうかに関係なく、フォーカスはテキストボックスに設定されません。何が起こっているのか、そしておそらくそれをどのように修正できるのかについての考えはありますか?