2016-07-29 88 views
0

我有一個文本編輯控制,我想以某種方式行事:DevExpress的正則表達式面膜不同Displayformat不起作用

當控件具有輸入焦點,我想只允許正整數的輸入(不爲零)。我通過使用Properties.Mask來實現這一點,這很好。

當控件沒有輸入焦點時,我希望它顯示輸入的數字,但在最後使用「,00」。

所以基本上,當我輸入東西時,我只看到我輸入的內容,例如「17」,但是當控制失去焦點時,我希望它顯示「17,00」。所以我只允許輸入完整的正數,但Controll總是會在後面添加「,00」。


我的理解是,基本上有兩種不同的「模式」:DisplayMode和EditMode。

EditMode =控件有焦點。

DisplayMode =該控件沒有焦點。

在EditMode中,我可以在我的Textedit控件中輸入東西。我能和不能進入的是由面具決定的。

當我失去焦點時,它進入DisplayMode。在這裏,我不能在TextEdit中輸入任何內容,但現在顯示的文本不再由掩碼確定,而是通過屬性「Properties.DisplayFormat」確定。所以爲了實現我的目標,我試圖將DisplayFormat.FormatString設置爲「0.00」,以便它始終顯示兩個小數位「x,00」。

不知何故,這並不像預期的那樣工作。 DisplayFormat似乎沒有做任何事情,即使在DisplayMode中,TextEdit仍然顯示沒有小數位的整個數字。

Those are the entered properties

我意識到,我可以用事件來解決這個問題,但我認爲是什麼DisplayFormat,EditFormat和麪膜是,我真的不想處理的東西,小的多個事件。

回答

1

遵循DevExpress知識庫topicDisplayFormat未在未綁定模式下工作。

由於未綁定的文本編輯器將 的值存儲爲字符串,因此無法應用格式設置,因此會發生格式問題。

如果使用XtraEditors 3或更高版本,您可能希望編輯的 Mask.MaskType屬性設置爲數字。在這種情況下,編輯器會強制 將編輯值作爲數字處理,因此可以對其進行格式化。

如果您不希望使用數字(或日期時間)面膜,請使用 ParseEditValue事件將字符串轉換爲數字。

我可以建議你使用Numeric面具與n0爲編輯蒙:
Numeric mask

+0

我不能使用MaskType Numeric的原因是它允許負數和零。 有沒有辦法阻止用戶使用負數? – Smogen

+1

@Smogen是的。您可以在掩碼中使用[Section Separator](https://msdn.microsoft.com/en-us/library/0c899ak8(v = vs.110).aspx#SectionSeparator)。將負面部分留空並使用'#'作爲數字佔位符。所以,這裏是你的面具:'###,###,###,###,###,###;'。 – nempoBu4

+0

工作正常!非常感謝你! – Smogen

0

爲了實現以上是相當簡單:

,只允許正整數,你需要設置將MaskType設置爲Numeric並使用EditMask ##########;#的數字表示可能的遺漏數量,因此十次#表示您可以使用十位數字。 (見nempoBu4的答案)

表示追加,00當控件失去焦點,你只需要設置DisplayFormat爲FormatType = Numeric和formatString的= n2