2016-07-29 6 views
0

ich TextEdit Kontrolle haben, dass ich in einer bestimmten Weise verhalten wollen:DevExpress RegEx Maske mit verschiedenen Displayformat funktioniert nicht

Wenn der Steuereingabefokus hat, möchte ich nur auf die Eingabe von positiven ganzen Zahlen erlauben (nicht Null). Das erreiche ich mit der Properties.Mask, die funktioniert.

Wenn das Steuerelement keinen Eingabefokus hat, möchte ich, dass es die eingegebene Zahl anzeigt, aber mit ", 00" am Ende.

Also im Grunde, während ich etwas eingeben, sehe ich nur, was ich z. "17", aber wenn die Steuerung den Fokus verliert, möchte ich "17,00" anzeigen. Damit kann ich nur ganze positive Zahlen eingeben, aber die Kontrollstelle fügt immer ", 00" hinzu.


Mein Verständnis ist, dass es im Grunde zwei verschiedene "Modi" gibt: DisplayMode und EditMode.

EditMode = Die Steuerung hat den Fokus.

DisplayMode = Die Steuerung hat keinen Fokus.

In EditMode kann ich Dinge in meine TextEdit-Steuerelement eingeben. Was ich eingeben kann und was nicht, hängt von der Maske ab.

Wenn ich den Fokus verliere, geht es in den DisplayMode. Hier kann ich nichts in das TextEdit eingeben, aber jetzt wird der angezeigte Text nicht mehr von der Maske, sondern von der Eigenschaft "Properties.DisplayFormat" bestimmt. Um mein Ziel zu erreichen, habe ich versucht, DisplayFormat.FormatString auf "0.00" zu setzen, so dass es immer zwei Dezimalstellen "x, 00" anzeigen würde.

Irgendwie funktioniert das nicht wie erwartet. Das DisplayFormat scheint nichts zu tun und selbst im DisplayMode zeigt das TextEdit immer nur die ganze Zahl ohne die Nachkommastellen an.

Those are the entered properties

Ich weiß, dass ich Ereignisse, um dieses Problem zu arbeiten, verwenden könnte, aber ich denke, das ist, was Displayformat, EditFormat und Maske sind für und ich möchte wirklich nicht, für etwas, das kleine mehrere Ereignisse behandeln.

Antwort

1

Accodrain zu DevExpress Knowledge Base topicDisplayFormat funktioniert nicht im ungebundenen Modus.

Probleme mit der Formatierung tritt auf, weil ein ungebundener Texteditor einen Wert als Zeichenfolge speichert, daher kann die Formatierung nicht angewendet werden.

Wenn Sie XtraEditors 3 oder höher verwenden, können Sie möchten die Redaktion Mask.MaskType Eigenschaft auf Numeric einzustellen. In diesem Fall wird der Editor gezwungen, den Edit-Wert als Zahl zu behandeln und kann sie daher formatieren.

Wenn Sie nicht die Numeric (oder Datetime) Maske zu verwenden, benutzen Sie bitte die ParseEditValue Ereignis eine Zeichenfolge in eine Zahl zu konvertieren.

kann ich Sie vorschlagen Numeric Maske zu verwenden mit n0 als Maske bearbeiten:
Numeric mask

+0

Der Grund, warum ich den MaskType Numeric nicht verwenden kann ist, dass es negative Zahlen und Null erlaubt. Gibt es eine Möglichkeit, dem Benutzer die Verwendung negativer Nummern zu verbieten? – Smogen

+1

@Smogen Ja. Sie können [Section Separator] (https://msdn.microsoft.com/en-us/library/0c899ak8 (v = vs.110) .aspx # SectionSeparator) in Ihrer Maske verwenden. Lassen Sie den negativen Bereich leer und verwenden Sie '#' als Ziffernplatzhalter. Also, hier ist deine Maske: '###, ###, ###, ###, ###, ###;'. – nempoBu4

+0

Das hat funktioniert! Vielen Dank! – Smogen

0

die oben Um das zu erreichen ist ziemlich einfach:

Um nur positive ganze Zahlen zu erlauben, müssen Sie festlegen, MaskType zu Numeric und verwenden Sie die EditMask ##########;. Die Anzahl der # stellt die mögliche Anzahl der didgets so zehn mal # bedeutet, dass Sie eine zehnstellige Zahl verwenden können. (Siehe nempoBu4 Antwort)

eine zusätzliche ,00 Um zu zeigen, wenn das Steuerelement den Fokus verliert, geben Sie einfach die Displayformat als Formattype festlegen müssen = Numeric und Formatstring = n2.