【问题标题】:Devexpress RegEx Mask with different Displayformat doesn't work具有不同显示格式的 Devexpress RegEx 掩码不起作用
【发布时间】:2016-07-29 09:59:44
【问题描述】:

我有一个想要以某种方式运行的 Textedit 控件:

当控件具有输入焦点时,我只想允许输入正整数(不是零)。我通过使用 Properties.Mask 来实现这一点,效果很好。

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

所以基本上,当我输入一些东西时,我只会看到我输入的内容,例如“17”,但当控件失去焦点时,我希望它显示“17,00”。这样我就只能输入整数正数,但控件之后总是会添加“,00”。


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

EditMode = 控件具有焦点。

DisplayMode = 控件没有焦点。

在 EditMode 中,我可以在 Textedit 控件中输入内容。能进,不能进,由面具决定。

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

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

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

【问题讨论】:

    标签: c# .net devexpress maskedtextbox textedit


    【解决方案1】:

    根据 DevExpress 知识库topicDisplayFormat 无法在未绑定模式下工作。

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

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

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

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

    【讨论】:

    • 我不能使用 MaskType Numeric 的原因是它允许负数和零。有没有办法禁止用户使用负数?
    • @Smogen 是的。你可以在你的面具中使用Section Separator。将否定部分留空并使用# 作为数字占位符。所以,这是你的面具:###,###,###,###,###,###;
    【解决方案2】:

    完成上述操作相当简单:

    要只允许正整数,您需要将 MaskType 设置为 Numeric 并使用 EditMask ##########;# 的数量代表可能的小工具数,因此十倍 # 意味着您可以使用十位数字。 (见 nempoBu4 的回答)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 2023-03-09
      • 2016-06-04
      相关资源
      最近更新 更多