XtraEditors 库允许在编辑期间使用掩码。 掩码提供了受限制的数据输入以及格式化数据输出。 此主题中的小节提供了关于掩码功能的总说明:
总说明
如果需要确保最终用户只以特定的格式输入取值,那么可以使用掩码。 掩码仅在编辑模式下有效。 当编辑器没有在编辑模式下时,它的文本根据其 RepositoryItem.DisplayFormat 属性指定的格式进行显示。
LookUpEdit、GridLookUpEdit、MemoEdit、MemoExEdit 和 ImageComboBoxEdit 控件不支持掩码模式下的编辑。
当输入的字符串应该与某种特定格式相匹配时,使用掩码是有用的。 例如,某个文本编辑器仅应该接受 24 小时格式的日期/时间值,或仅接受数字值。 另一种示例是在某个编辑器内输入电话号码 (在编辑时仅需要最终用户输入数字,而应该自动跳过连接号)。 要支持这些格式以及其他众多数据输入格式,则可以使用掩码模式。可以通过 RepositoryItemTextEdit.Mask 属性 (属于编辑器的 TextEdit.Properties 对象) 来访问编辑器的掩码设置。 RepositoryItemTextEdit.Mask 属性表示 MaskProperties 类的一个实例,并且包含了掩码设置 (掩码类型、掩码、或者应该被保存到编辑值的掩码原义字符等)。
在设计时刻,可以使用“Mask Editor(掩码编辑器)”来定制掩码设置。 此编辑器提供了多种预定义的掩码。 也可以创建自定义掩码。 此编辑器的“Test Input(测试输入)”文本框允许对选中的掩码进行测试。 要调用此编辑器,则在属性网格中单击 RepositoryItemTextEdit.Mask 属性的省略号按钮 (...)。
掩码类型
要启用掩码输入,则通过 MaskProperties.MaskType 属性选中所需的掩码类型,并且通过 MaskProperties.EditMask 属性指定掩码字符串。 掩码字符串标识了数据输入模板。 可以使用预定义的掩码字符串,或者构建自己的掩码表达式。 应该根据掩码类型来设置掩码字符串,可用的掩码类型在下表中列出:
掩码类型 | 如果…,则使用此掩码 | 说明 | 示例 |
---|---|---|---|
None | 禁用掩码模式。 | ||
DateTime DateTimeAdvancingCaret |
… 编辑器应该接受特定格式的日期/时间值。 |
DateTime/DateTimeAdvancingCaret 类型的掩码可以有效地简化日期/时间值的输入。
预定义的掩码可以被用于输入有公共日期/时间模式的取值。 也可以创建自定义掩码,来指定日期/时间值的可编辑部分 (年、月、日、小时、分钟等)。 这些掩码的语法与 MSDN 中的 日期和时间格式字符串 主题所述的日期/时间格式相类似。 掩码使用的数据输入模式会受到当前 culture 设置的影响。 可以通过在控制面板中的“区域和语言选项”对话框来定制这些设置。请参阅 掩码类型: 日期-时间 主题来获得更多信息。 |
EditMask: D (长日期模式); 当前 culture: 英语(美国)
EditMask: yyyy-MMM-d, HH:mm:ss (自定义日期模式); 当前 culture: 法语(法国) |
Numeric | … 编辑器应该接受特定格式的数字值。 |
Numeric 类型的掩码能有效地简化数字值 (货币值、整数、浮点数等) 输入。
这种模式的掩码允许输入有不同的公共及自定义模式的数字值。 也可以在小数点分隔符的左、右侧指定任意的数字和所需的数位,是否显示千位分隔符等。 这些掩码的语法与 MSDN 中的 数字格式字符串 主题中述的数字格式相类似。 特定的掩码依赖于当前的 culture 设置。请参阅 掩码类型: 数字 主题来获得更多信息。 |
EditMask: c (货币); 当前 culture: 英语(美国)
EditMask: # ##0.00 $;(# ##0.00 $) (自定义); 当前 culture: 法语(法国) |
Simple | … 最终用户可以输入的字符串是固定的格式 (没有其他格式) 和固定的长度 (例如,电话号码和字母数字序列)。 |
这种掩码类型也支持任意的字符 (例如,可以指定电话号码应该包含 0 到 3 位编码)。 在这些掩码中可以包括任何辅助字符,并且这些辅助字符将被原样显示在编辑框中、并且在编辑时将被跳过 (例如,电话号码中的连接符)。
请参阅 掩码类型: Simple 主题来获得更多信息。 |
EditMask: (999)000-00-00 (电话号码) |
Regular |
在这种模式的掩码中,使用了简单正则表达式语法,它类似于在 XtraEditors 版本 2 中实现的那样。 这种模式被设计用于向后兼容。 改用实现了全功能正则表达式的 RegEx 模式,就能提供更灵活的数据输入控制。
要获得关于此模式中所使用的正则表达式语法的信息,请参阅 掩码类型: 简单正则表达式 主题。 |
||
RegEx |
… 最终用户可以输入的字符串长度不固定; 或… 可以使用几种可选的格式之一来输入取值; 或… 只可以在某个特定的位置输入来源于特定范围的字符; 或… 应该使用自动完成功能 (最终用户输入文本,并且在没有其他选择的情况下由编辑器完成改写) |
在这种模式中,可以使用全功能正则表达式来构造掩码。 这提供了十分灵活的数据输入控制。 例如,可以创建单个掩码来允许最终用户以 12 小时或 24 小时格式来输入时间值。
请参阅 掩码类型: 全功能正则表达式 主题来获取关于在这种模式中所使用的正则表达式语法的信息。 这种模式中掩码所使用的语法与由 POSIX ERE 规范中定义的语法相类似。 |
EditMask: ((\+\d)?\(\d{3}\))?\d{3}-\d\d-\d\d (输入电话号码的几种有效格式) |
下面的示例展示了如何让文本编辑器接受使用了长日期模式的日期/时间值:
C# | 复制代码 |
---|---|
textEdit1.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.DateTime;
textEdit1.Properties.Mask.EditMask = "D";
|
Visual Basic | 复制代码 |
---|---|
TextEdit1.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.DateTime
TextEdit1.Properties.Mask.EditMask = "D"
|
掩码编辑器的额外定制
选项 | MaskType.DateTime | MaskType.Numeric | MaskType.Simple | MaskType.Regular | MaskType.RegEx |
---|---|---|---|---|---|
BeepOnError | |||||
SaveLiteral | |||||
IgnoreMaskBlank | |||||
PlaceHolder | |||||
ShowPlaceHolders | |||||
AutoComplete |
BeepOnError 选项
对于所有类型的掩码,Boolean 型的 MaskProperties.BeepOnError 属性都是可用的。 把此属性设置为 true,当最终用户试图键入一个无效字符串时允许响铃。 假定使用了 Numeric 类型的掩码。 在这种情况下,最终用户每次试图键入非数字字符时,编辑器都将发出一段提示声音。
SaveLiteral 选项
对于 Simple 和 Regular 掩码类型,可以指定是否总是把显示的掩码字符 (原义字符) 包括在编辑器的取值内。 换句话说,你可以控制那些字符是否出现在由 BaseEdit.EditValue 属性返回的取值中。 要使这些字符无法被访问,则必须把 MaskProperties.SaveLiteral 属性设置为 false。 在这种情况下,如果显示的取值是“(555)123-76-34”,那么由 BaseEdit.EditValue 属性返回的取值就是“5551237634”。
PlaceHolder 和 ShowPlaceHolders 选项
对于 Simple、Regular 和 RegEx 掩码类型,使用由 MaskProperties.PlaceHolder 属性确定的特殊字符来呈现编辑框中的占位符。 可以使用该属性来改变默认的占位符 (“_”符)。
对于 RegEx 掩码类型,通过把 MaskProperties.ShowPlaceHolders 属性设置为 false,可以隐藏占位符。 下图展示了一个其掩码被设置为“CODE-\d{3}-NO-\d{3}”的空白文本编辑器 (掩码类型是 RegEx):(ShowPlaceHolders 属性值被设置为 true; “_”符号被用作占位符。)
(ShowPlaceHolders 属性值被设置为 false)
IgnoreMaskBlank 选项
如果此属性值设置为 false,那么焦点不能移出此编辑器,直至完整输入取值。
编辑器中的错误由一个错误图标指示:要在输入无效值时提供适当的响应,则可以接管 BaseEdit.InvalidValue 事件。
AutoComplete 选项
对于 RegEx 掩码类型,可以启用自动完成功能。 在这种模式中,编辑器将尝试完成已经由最终用户部分输入的取值。 使用 MaskProperties.AutoComplete 属性来指定启用哪种自动完成模式:
自动完成模式 | 说明 |
---|---|
Strong |
最终用户每次键入一个字符,编辑器就确定后面的占位符是否可以被自动填充。 如果仅有某个特定的字符可以被插入到此位置,则编辑器自动显示此字符,并且把插入点移动到此字符的右侧。
假设编辑掩码被设置为 “\R{MonthNames}” (编辑器将接受月份的名称)。 当最终用户在空白编辑框中输入“M”字符时,第二个占位符被自动填充为“a”字符,这是因为有两个月份的名称 (March 和 May) 都以“M”开始,并且在第二个位置上都包含了一个“a”。 如果“r”字符被按下,那么编辑器将自动完成输入并且显示“March”:
|
Optimistic |
当最终用户第一次在空白编辑框中输入一个字符时,编辑器使用默认值来自动填充所有后续的占位符。 对于仅接受数字值的占位符, “0”字符是默认的。 对于接受单词字符的占位符,“a”字符是默认的。
假设掩码被设置为“\R{MonthNames}”。 在“M”字符被输入之后,编辑器自动插入“May”月份 (这是在两种选择——March 和 May 之间最短的可用值):
例如,编辑掩码被设置为“\d{3}-\d{2}-\d{2}” (一种电话号码模式)。 在空白编辑框中第一个字符 (例如“1”) 被输入之后,后续的占位符被使用默认值 (“0”字符) 自动填充,并且被选中:
|
如果 MaskProperties.AutoComplete 属性值被设置为 AutoCompleteType.Default,那么在这种情况下编辑器将使用 AutoCompleteType.Strong 自动完成模式。