2009-05-06 24 views
3

这个应该很容易的任务给了我一些头痛。我只是想让用户输入任何成功输入float.TryParse的文本到Textboxish控件中。C#输入验证的文本框:浮动

我可以使用一个正常的文本框,并检查一些btnOK_Click文本,但这显然是跛脚。此外,还有一个很好的内置MaskedTextBox控件,但是我没有将其掩码设置为等于float.TryParse。而且,它似乎只在焦点更改发生时才检查有效性。

在网上搜索带来了一些有趣的想法,但没有一个像我想的那么好。

你是如何解决这个问题的?我是否错过了一个明显的解决方案,还是我必须自己实现这个功能?

我知道几个类似的线程在SO上,但没有找到可行的解决方案。

更新:是的,WinForms。

回答

6

编辑

嗯,这使得它容易得多......只需添加一个Validating事件处理程序到你的文本框 做在代码中TryParse后面。如果它无效,提示用户等。

验证将火当用户完成打字和移动焦点从文本框,所以如果你需要在飞行检查这样做,你可以处理框TextChanged或在键按压/ KeyUp事件处理程序,而不是

这是在asp.net或的WinForms/WPF

如果它asp.net,你可以使用的RegularExpressionValidator组合(以占逗号分离 - ,小数点后1位,等...),并一个RangeValidator来设置最小/最大值f或浮动。

除此之外,为了保证这将是包装的文本框在一个UpdatePanel,坚持就可以了CustomServerValidator,并在服务器验证功能,在TextBox.Text值做TryParse,如果成功的唯一方法是有效,如果失败,无效

4

请小心使用Validating并验证为false。您可能会发现,除非输入有效数据,否则无法将焦点从文本框移开,这是一个非常大的可用性问题。

我通过简单地尝试TryParse()LostFocus解决这个问题,如果TryParse失败,我给文本框背景添加一个红色的颜色,使其明显有些错误。

+1

在我的最终解决方案中,我缓存最后一个有效值,如果需要,重置文本,如果焦点丢失。 – mafu 2009-06-25 12:00:19