文本框验证 - C#

3
我在处理C#应用程序的文本框验证时遇到了一些困难。问题是,该文本框只应接受十进制值。这意味着除了“.”符号之外,不应接受任何字母或其他符号。我可以过滤字母,但我不知道如何管理文本框应接受的“.”数量。如果有人知道如何做到这一点,请给我一个想法。
非常感谢您 :)
5个回答

4
decimal value;
bool isValid = decimal.TryParse(textBox.Text, out value);

if (!isValid)
{
    throw new ArgumentException("Input must be a decimal value");
}

本地化,易于理解,可点赞 - Adam Houldsworth
这是我的应用程序之前的功能。然而,我正在避免许多错误消息弹出。所以我只想对文本框进行过滤。但还是谢谢你:) 我很感激。呵呵 - Smiley

3

这应该可以工作!!!

修改为仅保留一位小数

    private void txtType_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.Back || (e.KeyChar == (char)'.') && !(sender as TextBox).Text.Contains("."))
        {
            return;
        }
        decimal isNumber = 0;
        e.Handled = !decimal.TryParse(e.KeyChar.ToString(), out isNumber);
    }

这正好是我现在能做到的。但是,这不会过滤文本框应接受的小数位数。它仍然接受2个小数点。 :( - Smiley
这正是我需要的!!谢谢。现在我只需要学习你的代码。:) 非常感谢。等等,我不能使用退格键?呵呵。 - Smiley
1
@Kim 注意,这不是本地化的 - 一些国家使用逗号表示小数位。 - Adam Houldsworth
@Adam,是的,我知道,但我正在开发的这个软件只是为了我的课程做的一个小练习。谢谢你提醒 :) - Smiley
修改了一下,因为它是针对整数而不是小数...我的错...但它应该可以工作,另外你可以添加一些逻辑来处理负号。 - Luiscencio
显示剩余6条评论

1

只是一个想法:如果您正在监视小数位,只需在控件中保留一个布尔标志,表示“我已经有了一个点”; 后续的点是无效的。

或者,在检查小数位时,您可以使用Contains

if (textbox.Text.Contains("."))

此外,请查看MSDN上提供的此示例(NumericTextBox):

http://msdn.microsoft.com/en-us/library/ms229644(VS.80).aspx


是的,我看过这个,这实际上是我学习如何在文本框中限制字母和一些符号的地方。然而,我正在寻找的是一种只允许一个小数点的限制文本框的方法。 - Smiley
+1 for Numeric Text Box 示例。正如您建议的那样,它仍需要“我已经有一个小数分隔符”的标志。 - Robert Harvey
@Kim,我解释了一个简单的标记方法。当检测到小数点时,将您的标志设置为true,在随后的检测中,您会表现得好像它无效。 - Adam Houldsworth

1

0
使用 MaskedTextBox 替代,并将掩码设置为仅接受小数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接