Here’s an interesting bug report. The code below shows two readonly textboxes on a form, both containing floating point values. The first is left-aligned.
When you hit tab from the first textbox, the value changes from 4.011 to 4.000
If you change the Alignment to Right (1) then it works as expected.
Possible alignment property values:
0 = Left
1 = Right
2 = Center
3 = Automatic (Default)
When you tab off the textbox, VFP is trying to match “4.011 ” (trailing spaces) with the default input mask “#######.###” which was set when the value was set.
Since the second character is the decimal place, which does not match the second “#”, the matching stops.
When the value is right aligned, then the textbox has “ 4.011“ (leading spaces) which VFP tries to match with “#######.###” which does not stop prematurely.
When it’s not readonly, then the value is “ 4.011 “ (leading and trailing spaces), which matches the mask.
=== STEPS TO REPRO ===
1. Run code below.
2. Press TAB to move focus from 1st TextBox while watching it's value
OBSERVED: Value in TEXT1 goes from 4.011 to 4.000
EXPECTED: Value in TEXT1 to not change.
COMMENTS: Setting the ALIGNMENT of TEXT1 = 1 or 3, *OR* setting it's READONLY = .F. causes EXPECTED results.
#DEFINE TXT_ALIGN 0
DEFINE CLASS form1 AS FORM
NAME = "Form1"
ADD OBJECT text1 AS TEXTBOX WITH ;
ALIGNMENT = TXT_ALIGN, ;
HEIGHT = 23, LEFT = 108, ;
READONLY = .T., TOP = 60, ;
WIDTH = 100, NAME = "Text1"
ADD OBJECT text2 AS TEXTBOX WITH ;
ALIGNMENT = 3, HEIGHT = 23, ;
LEFT = 108, READONLY = .T., ;
TOP = 96, WIDTH = 100, ;
NAME = "Text2"
THIS.text1.VALUE = 4.011
THIS.text2.VALUE = 4.01001