Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
When event inconsistency?
Message
De
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:
01075595
Vues:
15
>I believe I've seen this on UT but I can't find it... Why does WHEN event for a command button fire twice when it does not have focus before it is clicked?
>
>
loForm = createobject('zForm')
>loForm.show
>read events
>
>define class zForm as form
>	Caption = "Open debugout, and 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 = 1, ;
>		Top = 10, ;
>		Name = "Text1", ;
>		value = 0
>	ADD OBJECT command1 AS commandbutton WITH ;
>		Top = 10, ;
>		Left = 140, ;
>		Height = 27, ;
>		Width = 120, ;
>		Caption = "When", ;
>		TabIndex = 2, ;
>		Name = "Command1"
>	ADD OBJECT command2 AS commandbutton WITH ;
>		Top = 110, ;
>		Left = 280, ;
>		Height = 27, ;
>		Width = 60, ;
>		Caption = "Exit", ;
>		TabIndex = 3, ;
>		Cancel = .T.
>		Name = "Command2"
>	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.When
>		debugout this.Name,program()
>		thisform.text1.value = thisform.text1.value + 1
>	ENDPROC
>	PROCEDURE command1.GotFocus
>		debugout this.Name,program()
>	endproc
>	PROCEDURE command2.When
>		debugout this.Name,program()
>	ENDPROC
>	PROCEDURE command2.click
>		thisform.release
>		clear events
>	endproc
>enddefine
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
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform