用于检查C#中数字的TextBox方法

时间:2016-06-30 22:41:00

标签: c# wpf visual-studio

我正在创建一个拥有大量用户输入的程序。大多数用户输入将在TextBox中,只需要数字条目。

目前,我只是使用TextChanged方法获取值,然后根据条目显示/隐藏其他按钮/复选框。

我想创建一种方法或实现某种利用率,检查何时输入框,防止人们输入错误,修复他们所做的更改,或创建一个消息框,告诉他们他们的输入无效。

我目前有两种方式,但他们不能互相合作。

我有一个解析方法,它将输入文本转换为Double但我遇到的问题,如果他们使用退格按钮然后重新输入他们的数字,它将无法识别输入(需要打开/关闭其他文本框/复选框)。这适用于TextChanged方法。

我有一个使用PreviewTextInput和KeyDown方法的正则表达式集。这非常适用于不允许某些输入,但它不适用于textchanged方法(或者至少我不明白如何指向它)。

我需要一些关于如何创建一种可行的方法来检查文本框输入的指导,这些方法不需要我的用户按下每个条目的按钮(也就是实时检查)。

3 个答案:

答案 0 :(得分:2)

我认为这就是你要找的东西 Binding.Validation

对于Int来说,只需绑定到Int就可以了。

答案 1 :(得分:1)

如果您需要通过按钮使用NumericUpDown或其子类之一来增加/减少值。

如果您只需要一个文本框,则必须处理PreviewKeyDown()事件。您需要手动检查按下的有效/无效键。当按下无效键时,您设置e.Handled = true;以防止按键事件发生隧道效应。

答案 2 :(得分:0)

我真的无法完全理解,但据我说,你试图阻止文本框采取无效输入,同时你想使用TextChanged方法,所以你可以这样做:

<TextBox Name="txtAddNumber" TextChanged="txtAddLable_TextChanged" PreviewTextInput="txtAddNumber_PreviewTextInput" />

和txtAddNumber_PreviewTextInput方法:

private void txtAddNumber_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    char c = Convert.ToChar(e.Text);
    if (!Char.IsLetter(c))
        e.Handled = false;
    else
        e.Handled = true;
    base.OnPreviewTextInput(e);
}

如果你想在输入的基础上处理一些错误信息,你可以这样做:

private void txtAddNumber_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    char c = Convert.ToChar(e.Text);
    if (!Char.IsLetter(c))
    {
        // Put your Logic here according to requirement
        e.Handled = false;
    }
    else
    {
        // Put your Logic here according to requirement
        e.Handled = true;
    }
    base.OnPreviewTextInput(e);
}

e.Handled = false表示输入为数字,e.Handled = true表示输入为非数字。

你的txtAddLable_TextChanged方法会像:

private void txtAddLable_TextChanged(object sender, TextChangedEventArgs e)
{
      // Logics here...
}