maskedtextbox控件有哪些优点?为什么开发都爱用它?

吉云

今天跟大家唠唠我搞 MaskedTextBox 的那些事儿,这玩意儿说难不难,说简单也不简单,反正我踩不少坑,就当是给大家避坑。

老板甩给我一个需求,说要搞一个能限制用户输入格式的文本框,比如电话号码、IP 地址啥的。我想这还不简单,TextBox 控件直接上呗。结果,试半天,发现这玩意儿只能输入文本,没法限制格式!

上网一搜,才发现有个叫 MaskedTextBox 的控件,专门干这个的。这下可好,赶紧拽到 WinForm 窗体里,开始摆弄。

maskedtextbox控件有哪些优点?为什么开发都爱用它?

就是那个 Mask 属性,这玩意儿是 MaskedTextBox 的灵魂!查半天资料,总算搞清楚几个常用的掩码:

  • 0:必须输入一位数字(0-9)。
  • 9:可以输入一位数字(0-9),也可以不输入。
  • #:可以输入一位数字(0-9)或加减号(+、-),也可以不输入。
  • L:必须输入一个字母(A-Z、a-z)。
  • maskedtextbox控件有哪些优点?为什么开发都爱用它?

  • ?:可以输入一个字母(A-Z、a-z),也可以不输入。
  • &:必须输入一个字符。
  • C:可以输入任意字符,也可以不输入。
  • A:必须输入一个字母或数字。
  • a:可以输入一个字母或数字,也可以不输入。
  • .:小数点占位符。实际显示的小数点字符取决于应用程序的区域设置。
  • maskedtextbox控件有哪些优点?为什么开发都爱用它?

  • ,:千位分隔符。实际显示的千位分隔符字符取决于应用程序的区域设置。
  • ::时间分隔符。实际显示的时间分隔符字符取决于应用程序的区域设置。
  • /:日期分隔符。实际显示的日期分隔符字符取决于应用程序的区域设置。
  • $:货币符号。实际显示的货币符号字符取决于应用程序的区域设置。

比如说,我要搞一个电话号码的格式,可以这样写:Mask = "000-0000-0000"。这样用户就只能输入数字,而且会被自动格式化成 XXX-XXXX-XXXX 的形式。挺方便的?

maskedtextbox控件有哪些优点?为什么开发都爱用它?

但是!问题来!那个下划线,看着贼难受!就是你没输入东西的时候,它会显示一堆下划线占位符。这玩意儿怎么去掉?

又是一顿搜,发现有个 PromptChar 属性,可以设置占位符。默认是下划线,改成空格就行:PromptChar = ' '。

还有一个 AllowPromptAsInput 属性,默认是 true。这个属性是控制是否允许用户输入 PromptChar 作为有效字符的。如果设置成 false,用户就不能输入空格。

搞完这些,基本就差不多。但是,又遇到一个坑!

有些时候,我们需要在代码里获取 MaskedTextBox 的值。但是,直接用 Text 属性获取到的值,可能会包含占位符。比如,用户只输入 "123-",Text 属性的值可能是 "123-____-____"。这可不行!

后来发现,可以用 TextMaskFormat 属性来控制返回值的格式。可以设置成 IncludeLiterals、ExcludeLiterals、IncludePrompt 或 ExcludePrompt。IncludeLiterals 会包含掩码中的分隔符,ExcludeLiterals 会排除分隔符,IncludePrompt 会包含占位符,ExcludePrompt 会排除占位符。根据自己的需求选择合适的格式就行。

maskedtextbox控件有哪些优点?为什么开发都爱用它?

比如,我想要只获取用户输入的内容,不要任何分隔符和占位符,可以这样写:* = *; string value = *;

再说说事件处理。MaskedTextBox 也有一些常用的事件,比如 TextChanged、Validating、Validated 等。可以利用这些事件,实现一些更复杂的功能,比如实时验证用户输入、自动填充数据等。

MaskedTextBox 看起来简单,用起来还是有一些坑的。希望我这回的分享,能帮大家少走一些弯路。

  • Mask 属性是灵魂,要好好研究。
  • maskedtextbox控件有哪些优点?为什么开发都爱用它?

  • PromptChar 属性可以去掉难看的下划线。
  • AllowPromptAsInput 属性控制是否允许输入占位符。
  • TextMaskFormat 属性控制返回值格式。
  • 利用事件处理,可以实现更复杂的功能。

就说这么多,溜溜!

maskedtextbox控件有哪些优点?为什么开发都爱用它?

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]