使用不同Displayformat的Devexpress RegEx Mask不起作用

时间:2016-07-29 09:59:44

标签: c# .net devexpress maskedtextbox textedit

我有一个Textedit Control,我希望以某种方式表现:

当控件具有输入焦点时,我想只允许输入正整数(非零)。我通过使用Properties.Mask来实现这一目标,并且工作正常。

当控件没有输入焦点时,我希望它显示输入的数字,但最后显示“,00”。

所以基本上,当我输入内容时,我只会看到我输入的内容,例如“17”但是当控制失去焦点时,我希望它显示“十七”。所以我只允许输入完整的正数,但Controll将始终添加“,00”。

我的理解是基本上有两种不同的“模式”:DisplayMode和EditMode。

EditMode =控件具有焦点。

DisplayMode =控件没有焦点。

在EditMode中,我可以在Textedit Control中输入内容。我可以和不能进入的是由面具决定的。

当我失去焦点时,它会进入DisplayMode。在这里,我无法在TextEdit中输入任何内容,但现在显示的文本不再由掩码确定,而是由属性“Properties.DisplayFormat”决定。因此,为了实现我的目标,我尝试将DisplayFormat.FormatString设置为“0.00”,这样它总是会显示两个小数位“x,00”。

不知何故,这不能按预期工作。 DisplayFormat似乎没有做任何事情,即使在DisplayMode中,TextEdit仍然只显示没有小数位的整数。

Those are the entered properties

我意识到我可以使用事件解决这个问题,但我认为这就是DisplayFormat,EditFormat和Mask的用途,我真的不想处理那些小的事件。

2 个答案:

答案 0 :(得分:1)

对DevExpress知识库topic DisplayFormat的处理无法在未绑定模式下工作。

  

格式化问题的发生是因为未绑定的文本编辑器存储   作为字符串的值,因此无法应用格式。

     

如果您使用XtraEditors 3或更高版本,您可能希望设置编辑器    Mask.MaskType 属性为数字。在这种情况下,编辑器是强制的   将编辑值作为数字处理,因此可以对其进行格式化。

     

如果您不想使用数字(或日期时间)模板,请使用    ParseEditValue 事件,用于将字符串转换为数字。

我建议您使用Numeric掩码和n0作为编辑掩码:
Numeric mask

答案 1 :(得分:0)

完成上述工作非常简单:

要仅允许正整数,您需要将MaskType设置为Numeric并使用EditMask ##########;#的数量表示可能的小部件数量,因此十次#表示您可以使用十位数字。 (见nempoBu4'答案)

要在控件失去焦点时显示其他,00,您只需将DisplayFormat设置为FormatType = Numeric和FormatString = n2