【问题标题】:Max length for decimal tetbox十进制文本框的最大长度
【发布时间】:2012-08-20 18:17:34
【问题描述】:

我想创建一个允许用户键入十进制值的文本框。现在要注意的是,我想将 maxlength 赋予整数部分(小数点前的值),所以当我说 maxlength 为 5 时

用户可以进入

.12
12345
12345.67

用户应该无法进入

123456
123456.78

我正在处理文本框按键以限制字母

If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) AndAlso e.KeyChar <> "."c Then
    e.Handled = True
End If

' only allow one decimal point
If e.KeyChar = "."c AndAlso TryCast(sender, TextBox).Text.IndexOf("."c) > -1 Then
    e.Handled = True
End If

有人可以帮我解决这个 maxlength 部分吗?感谢任何帮助和指示。

【问题讨论】:

    标签: .net regex vb.net


    【解决方案1】:

    您将无法使用MaxLength 属性执行此操作,文本框只是查看String.Length,而您想要实际将字符串解析为十进制值并进行一些边界检查它。

    您需要在按键事件中执行此操作。最简单的做法是:

    var value = Decimal.Parse(textBox1.Text);
    if(value >= 99999)
         e.Handled = true;
    

    这可能不是您想要的确切算法,但您明白了。

    【讨论】:

    • 使用Decimal.TryParse 和textBox1.Text.Trim() 可能更好?
    • @UweKeim 如果他已经在使用按键事件来防止输入字符(并且可能是除了构成有效十进制值之外的任何内容),那么使用 TryParse() 有点多余并且可能还有Trim()(因为他可能已经在阻止空格)。
    • 如果文本是通过右键单击上下文菜单和粘贴命令输入的怎么办? ;-)
    • 如果text=99999,你将无法添加小数点并继续填充小数部分
    • @UnLoCo 我说这不是确切的算法,但根据他的 MaxLength 为 5 的文本框,这仍然是正确的。
    猜你喜欢
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多