Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
When event inconsistency?
Message
 
To
07/12/2005 02:58:51
General information
Forum:
Visual FoxPro
Category:
Object Oriented Programming
Environment versions
Visual FoxPro:
VFP 9
OS:
Windows XP SP2
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01075534
Message ID:
01075835
Views:
19
Hi Fabio,
It looks like the Click event for CommandButton, Checkbox, combobox, listbox, optiongroup,... by design, triggers the Valid event. Valid, normally fires when a control loses focus, but because when you click on a control focus must stay on the control, when fires the second time.
However, if the CommandButton has the focus, Click doesn't trigger Valid...
Trouble is, for these controls, if you have code in the When event that, for example sets a form property based of the status before Click event, it will be actually re-set based on the status after Click.
Having Nodefault in Click is a workaround, but that means OO design goes out the window...

>
>this is true for CommandButton,Checkbox,combobox,listbox,optiongroup,....
>on all vfp versions.
>
>Every time you change the control's value VFP execute a Valid/When cycle.
>
>And VFP ignore a Valid() RETURN .F. !!
>
>with a checkbox
>
>ACTIVATE WINDOW "debug Output"
>SET EVENTLIST TO Click,Valid,When,Message,InteractiveChange
>SET EVENTTRACKING ON
>
>loForm = createobject('zForm')
>loForm.show
>
>FOR k=1 TO 20
>	CHRSAW(0.2)
>	KEYBOARD  '{SPACEBAR}' PLAIN CLEAR
>	DOEVENTS
>NEXT
>
>
>
>define class zForm as form
>	Caption = "Click on When button"
>	Name = "Form1"
>	Autocenter = .T.
>	Width = 360
>	Height = 150
>	visible = .t.
>
>	ADD OBJECT text1 AS textbox WITH ;
>		Height = 23, ;
>		Left = 20, ;
>		Width = 80, ;
>		TabIndex = 2, ;
>		Top = 10, ;
>		Name = "Text1", ;
>		value = 0
>	ADD OBJECT command1 AS CHECKBOX WITH ;
>		Top = 10, ;
>		Left = 140, ;
>		Height = 27, ;
>		Width = 120, ;
>		Caption = "When", ;
>		TabIndex = 1, ;
>		Name = "Command1"
>
>	ADD OBJECT label1 AS label WITH ;
>		top = 44, ;
>		left = 20, ;
>		width = 250, ;
>		wordwrap = .T., ;
>		autosize = .t., ;
>		Caption = "When event fires twice when the button does not have focus before click!!?"
>	ADD OBJECT label2 AS label WITH ;
>		top = 84, ;
>		left = 20, ;
>		width = 250, ;
>		wordwrap = .T., ;
>		autosize = .t., ;
>		Caption = "When event fires once when the button has focus before click!!?"
>
>	PROCEDURE command1.Valid
>		RETURN .F.	&& this is ignored
>	ENDPROC
>
>* workaround
>*		PROCEDURE command1.Click
>*			NODEFAULT
>*		ENDPROC
>			
>	PROCEDURE command1.When
>		thisform.text1.value = thisform.text1.value + 1
>	ENDPROC
>	
>	PROCEDURE load
>		ADDPROPERTY(this,"lock",this)
>ENDDEFINE
>
Doru
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform