我想在输入过程中将此结果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更改为红色.这是向用户指示无效输入的好方法(而不是弹出MessageBox).