【问题标题】:TextBox method for checking numerics in C#C#中用于检查数字的TextBox方法
【发布时间】:2016-11-03 05:09:36
【问题描述】:

我正在创建一个包含大量用户输入的程序。大多数用户输入将在文本框中,只需要是数字条目。

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

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

我目前正在使用两种方式,但它们不能相互配合。

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

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

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

【问题讨论】:

  • 这是一个 WinForms 应用程序吗?如果是,为什么不使用 NumericUpDown 控件?
  • 这是在 WPF 中。我很抱歉没有具体说明。
  • 这是来自 Microsoft 的示例:msdn.microsoft.com/en-us/library/ms229644(v=vs.100).aspx 您也可以考虑使用 MaskedTextBox
  • 您也许可以在文本框失去焦点时验证该值。如果您需要验证输入而不要求用户离开文本框,您可能需要在每个 TextChanged 事件上重置一个计时器,然后在计时器结束时运行您的验证例程。这将允许用户在击键之间有一秒钟左右的时间来完成他们的打字。

标签: c# wpf visual-studio


【解决方案1】:

我真的无法完全理解,但根据我的说法,您试图防​​止文本框接受无效输入,同时您想使用 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...
}

【讨论】:

    【解决方案2】:

    我想这就是你要找的。
    Binding.Validation

    对于一个 Int,它就像绑定到一个 Int 一样简单。

    【讨论】:

    • 我很难完全理解这个功能的实现。我会先说,我对 C# 和 XAML 很陌生,但我掌握了一些 Java 类。他们给出示例的结构并没有完全转化为我实际在做的事情,所以对我来说很简单,但我只是没有看到它是如何在 WPF 中实现的。
    • 嗯,他们可能使用了正确的结构,所以我建议你复制。绑定到具有公共属性的类中的对象是 WPF 中的最佳实践。在更改的事件中不是最佳实践。 msdn.microsoft.com/en-us/vstudio/ms753962(v=vs.92).aspx
    • 基本上每个文本框都需要它自己的类吗?
    • 自己的班级?不,您需要熟悉绑定。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 2017-12-17
      • 1970-01-01
      • 2017-08-25
      • 1970-01-01
      • 2019-06-11
      相关资源
      最近更新 更多