Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
When event inconsistency?
Message
 
À
07/12/2005 02:58:51
Information générale
Forum:
Visual FoxPro
Catégorie:
Programmation Orientée Object
Versions des environnements
Visual FoxPro:
VFP 9
OS:
Windows XP SP2
Database:
Visual FoxPro
Divers
Thread ID:
01075534
Message ID:
01075835
Vues:
17
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
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform