所以我创建了一个名为“TextBox
”的wa_txt
,其中应包含wa
和wa_min
之间的数字“wa_max
”(比方说10和100例如)
如果TextBox
内的文字无效,则应显示MessageBox
警告用户并将值重置为旧值。
这是在wa_txt_Texchanged
事件中:
int wa = 0;
int wa_max = 100;
int wa_min = 10;
Int32.TryParse(wa_txt.Text, out wa);
if (wa == 0)
{
MessageBox.Show("not a number", "Alert", MessageBoxButton.OK, MessageBoxImage.Information);
wa_txt.Text = wa_old.ToString();
return;
}
if (wa > wa_max)
{
MessageBox.Show("number too big", "Alert", MessageBoxButton.OK, MessageBoxImage.Information);
wa_txt.Text = wa_old.ToString();
return;
}
if (wa < wa_min)
{
MessageBox.Show("number too small", "Alert", MessageBoxButton.OK, MessageBoxImage.Information);
wa_txt.Text = wa_old.ToString();
return;
}
wa_old = wa;
我的问题是,当我开始输入100并输入1时,MessageBox
会显示告诉我我的号码太小并将其重置为最后一个有效号码。
我打字完成后能以任何方式进行检查吗?
编辑:我希望在没有按下按钮的情况下离开TextBox
时也会触发该事件,就我所尝试的情况而言,该按钮不适用于keydown事件。
答案 0 :(得分:2)
当你在wa_txt
中输入一个数字时,它总是会说明该数字无效并重置为最后一个有效数字,这是非常符合逻辑的。说明:
if (wa < wa_min)
{
MessageBox.Show("number too small", "Alert", MessageBoxButton.OK, MessageBoxImage.Information);
wa_txt.Text = wa_old.ToString();
return;
}
显然,这是给你问题的if
块。您的最低人数为wa_min = 10;
。您将开始输入的所有数字都在0到9之间。它们都小于10.在这种情况下,if
语句始终为true。好像你在说:
if (true)
{
MessageBox.Show("number too small", "Alert", MessageBoxButton.OK, MessageBoxImage.Information);
wa_txt.Text = wa_old.ToString();
return;
}
我建议将TextChanged
逻辑复制到LostFocus
:
private void SoTextBox_LostFocus(object sender, RoutedEventArgs e)
{
//Your logic.
}
当TextBox
失去焦点时,这将运行您正在执行的逻辑。只要按下按钮或鼠标单击TextBox
失去焦点,此事件就会触发。此外,当您的最小数量大于9时,您将不会遇到问题。否则,我建议您使用某种计时器为用户提供一些时间来输入整数。