使用TextBox TextChanged事件来过滤输入

时间:2018-02-19 17:31:26

标签: c# wpf

所以我创建了一个名为“TextBox”的wa_txt,其中应包含wawa_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事件。

1 个答案:

答案 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时,您将不会遇到问题。否则,我建议您使用某种计时器为用户提供一些时间来输入整数。