【发布时间】:2013-11-13 20:29:58
【问题描述】:
我有一个TextBox,我想根据其中是否输入整数来运行几个条件。我的操作发生在 TextBox 所在窗口的代码隐藏中。
在LostFocus 事件下,我想做以下事情:
-
检查
stringIsNullOrEmpty-如果是-将文本设置为“默认记录”
-
验证输入的值是
Int如果不是 - 显示
MessageBox(Ok Button),然后将焦点重新设置在TextBox
**这是我的LostFocus 函数的样子:
private void TextBox_LostFocus(object sender, RoutedEventArgs e) //Lost Focus
{
if (string.IsNullOrEmpty(TextBox.Text))
TextBox.Text = "Default Record";
else if (Regex.IsMatch(TextBox.Text, @"^\d+$") == false)
{
MessageBox.Show("Illegal character in list.", "Warning!", MessageBoxButton.OK, MessageBoxImage.Warning);
TextBox.Focus();
}
}
上述函数可以很好地测试string IsNullOrEmpty,但我遇到了else if 条件的问题。当我尝试将焦点重新设置回TextBox 时,我得到MessageBoxes 的无限循环。为什么会这样,我该如何解决?
更新 1:
这些是TextBox 上的附加事件处理程序:
//State of View at startup
private void Document_Loaded(object sender, RoutedEventArgs e)
{
//This is run because I need the TextBox to have focus at window startup
TextBox.Focusable = true;
TextBox.Focus();
}
xaml:
<UserControl Loaded="Document_Loaded" ... >
【问题讨论】:
-
文本框上是否有任何其他事件处理程序,或者此处理程序中未显示任何代码?
-
是的,我有很多。如果我要发布所有内容,那就太多了。我应该寻找什么会破坏这个过程?
-
@Ericafterdark 开始一一删除它们,直到您想出复制问题所需的最小代码示例。当您删除任何剩余的事件处理程序或删除现有处理程序的任何部分时,会导致程序不再复制问题,那么您就有了“最小可重现代码示例”。在许多情况下,当你到达那一点时,问题就很明显了。如果不是,请编辑问题以包含它。
-
好的,我创建了一个全新的程序,其中包含一个带有 2
TextBoxes的窗口。整个窗口中唯一的事件处理程序是您在上面看到的LostFocus。话虽如此,我收到了相同的MessageBoxes无限循环。也许您不能从LostFocus事件处理程序调用.focus()... -
我能够复制它(有点 - 它只发生 3 次~)。 (Winforms)奇怪。
标签: c# wpf textbox code-behind lostfocus