vb.net - 如何在vb.net中输入时格式化文本框

标签 vb.net

我在 vb.net 应用程序中有 200 多个文本框。让我澄清一下,所有都是简单的文本框。现在客户要求在输入或查看记录时具有格式化的数值。使用 Format() 我可以播放以供查看,但在文本框中的添加/编辑模式期间(当用户输入值时)没有任何反应 我希望输入期间的结果为 1234567.0090 到 1,234,567.0090。

或指导我通过任何工具或代码更改所有文本框以屏蔽文本框的任何方式。

任何帮助表示赞赏。提前致谢。

最佳答案

首先,我非常强烈建议您尝试说服客户放弃此要求。一般来说,屏蔽文本框对于程序员和最终用户来说都是一种巨大的痛苦。在我看来,如果必须格式化用户输入,那么在控件失去焦点之后格式化用户输入的任何内容要比在控件失去焦点时尝试格式化输入要好得多。仍在打字。

无论采用哪种方法,最简单的方法都是创建您自己的用户控件(除非您想使用第三方控件,出于多种原因我不建议这样做),该控件继承自TextBox(而不是从 UserControl 继承)。如果您希望在用户完成输入并移至另一个控件后设置文本格式,则可以将 EventHandler 添加到控件的 LostFocus 事件并在那里格式化其输入。

但是,如果您希望在他们打字时进行格式化,那么您有几个可怕的选择。首先,您可以处理控件的 KeyPress 或 KeyDown 事件,并拦截并取消非数字字符,或者此时格式化整个 Text 属性。这是一种常见的方法,经常会以意想不到的方式失败,因为它最终不处理复制并粘贴到控件中的文本(这在数据输入应用程序中经常发生)。

另一种方法是处理 TextChanged 事件,该事件将响应键盘输入和粘贴文本,并动态重新设置文本格式。由于您经常在用户键入时更改文本,因此您的代码需要注意 SelectionStart 属性(以及其他属性),以便您不会在用户键入时意外更改插入符号的位置。另外,当您在格式化控件的文本属性时更改其文本属性时,此更改本身将产生另一个 TextChanged 事件,因此您需要小心,不要陷入无限循环。

重申我的主要观点,您会更高兴在 LostFocus 事件中进行格式化,您的最终用户也会如此。

编写完控件后,您可以在代码中进行全局替换,用“MyMaskedTextBox”替换“TextBox”(此处建议区分大小写)。

更新:以下是一些可以在 TextBox 的 LostFocus 事件中使用的简单解析/格式化代码:

double d;
TextBox tb = (TextBox)sender;
if (double.TryParse(tb.Text, out d))
{
    tb.Text = d.ToString("#,###,###,###.0000");
    tb.BackColor = SystemColors.Window;
}
else
{
    tb.BackColor = Color.Red;
}

如果输入的文本可以解析为 double ,则此代码将按照您所需的方式将用户的输入格式化为数字。如果输入不是有效的 double 值,则文本将保持原样,并且 BackColor 将更改为红色。这是向用户指示无效输入的好方法(而不是弹出消息框)。

关于vb.net - 如何在vb.net中输入时格式化文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1385624/

相关文章:

vb.net - Redim bool 数组与枚举和设置

c# - 从路径获取文件夹名称

sql - VB.Net 根据用户输入的文本框从 sql 数据库中检索数据

c# - 检查目标方法可以在 .Net 中抛出的所有可能的异常?

sql - 通过 Visual Studio 运行时查询失败,在其他地方工作正常

vb.net - 通过字符串名称获取对类实例的引用 - VB.NET

vb.net - MSXML "The system cannot locate the resource specified"

.net - RichTextBox.DetectUrls 间歇性工作

c# - 设计时教程

mysql - ASP.net - VB NET 如何计算 SQL 查询的行数