我有一个TextBox
我希望根据是否输入一个整数来运行几个条件。我的操作是从TextBox
所在的窗口的代码隐藏处进行的。
在LostFocus
事件下,我想执行以下操作:
检查string
IsNullOrEmpty
- 如果是 - 将文本设置为“默认记录”
确认输入的值为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" ... >
答案 0 :(得分:1)
请勿尝试从Enter,GotFocus,Leave中设置焦点, LostFocus,Validating或Validated事件处理程序。这样做可能会导致 您的应用程序或操作系统停止响应...
来自MSDN
答案 1 :(得分:0)
当我尝试将焦点重置回TextBox时,我得到了无穷无尽的感觉 循环
MessageBoxes
这是因为您正在调用焦点到TextBox控件,就在引发事件LostFocus
时。当您关闭MessageBox时,TextBox控件获得焦点,但事件LostFocus
不断被提升,并且,因为满足else
条件,您将有一个无限循环的MessageBoxes。
我认为您不应该使用事件LostFocus
来检查TextBox的值并再次关注。您是否考虑过活动TextChanged?
然后你可以这样做:
private void TextTest_TextChanged(object sender, TextChangedEventArgs e)
{
Console.WriteLine("Text changed");
/* your logic here */
TextTest.Focus(); //it could be useless in this case!
}
答案 2 :(得分:0)
跟踪自上次显示消息框后值是否已更改。 仅在您上次显示消息框后值已更改时才显示消息框。
我想是这样的:
private string lastValue = null;
private void TextBox_LostFocus(object sender, RoutedEventArgs e) //Lost Focus
{
bool valueChanged = ( lastvalue != TextBox.Text );
lastValue = TextBox.Text;
if (string.IsNullOrEmpty(TextBox.Text))
TextBox.Text = "Default Record";
else if (Regex.IsMatch(TextBox.Text, @"^\d+$") == false && valueChanged )
{
MessageBox.Show("Illegal character in list.", "Warning!", MessageBoxButton.OK, MessageBoxImage.Warning);
TextBox.Focus();
}
}
答案 3 :(得分:0)
您可能还想查看使用蒙版文本框将输入限制为整数。然后,当用户点击“ok / next / submit”时,你想要进行验证(检查)...无论什么都能完成输入。