我在 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 值。有没有想过发生了什么,也许我该如何解决?