FoxPro/Visual FoxPro - Como cerrar el form y pasar el control al anterior form al dar enter

   
Vista:

Como cerrar el form y pasar el control al anterior form al dar enter

Publicado por ENRIQUE (1 intervención) el 06/12/2017 20:05:08
hola amigos.

tengo un grid, quiero que al seleccionar y dar enter en un registro me cierre el form y pase el control al anterior form..


gracias por su respta.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Como cerrar el form y pasar el control al anterior form al dar enter

Publicado por Fidel José (539 intervenciones) el 06/12/2017 22:49:35
Con qué versión de VFP?

Suponiendo que sea VFP9

1) Formulario Padre (anterior)
1.1) En el form padre (anterior) debes crear un método, llamémosle "Raise_padre", que atenderá la llamada desde el form hijo.
1
2
3
4
5
6
7
* Method Raise_Padre
LPARAMETERS toResp
IF VARTYPE(toResp)="O"
	MESSAGEBOX(toResp.CampoChar1+" "+toResp.CampoChar2+" "+TRANSFORM(toREsp.CampoNum1))
	Thisform.oControl.SetFocus()   && oControl es algun control donde quieras que vaya el foco.
ENDIF
toResp = null

1.2) En el form padre (anterior) al llamar al form hijo, le agregas dos parámetros
DO FORM frmHijo WITH Thisform , "Raise_Padre"

2) En el form Hijo
2.1.) Crea dos propiedades, llamadas (por ejemplo), oWhere_Raise y cRaise_Event
2.2) Evento Init del form Hijo
1
2
3
4
5
LPARAMETERS toWhere_Raise,tcRAise_Event
WITH this
	.owhere_raise = toWhere_Raise
	.craise_event = m.tcRaise_Event
ENDWITH

2.3) Crea un método delegado para BindEvent, llamemoslo "dlg_Enter"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
LPARAMETERS nKeyCode, nShiftAltCtrl
LOCAL lnEvents,;
	loObj as Object,;
	loREsp as Object,;
	lcCursor,;
	lRelease
 
lnEvents = AEVENTS(laEvents,0)
IF !EMPTY(m.lnEvents)
	loObj = laEvents[1]
	lcCursor = loObj.parent.parent.REcordSource
	IF nKeyCode = 13
		SELECT (m.lcCursor)
		IF !EOF()
			loREsp = NEWOBJECT("empty")
			SCATTER NAME loResp
			ADDPROPERTY(loResp,"nRecord",RECNO(m.lcCursor))
			IF VARTYPE(this.owhere_raise)="O" ;
				AND !EMPTY(this.craise_event) ;
				AND PEMSTATUS(this.owhere_raise,this.craise_event,5)
				RAISEEVENT(this.owhere_raise,this.craise_event,loResp)
				lRElease = .t.
			ENDIF
		ENDIF
	ENDIF
ENDIF
loResp = null
IF m.lRelease
	thisform.Release()
ENDIF


2.4) Después de configurar el control grid, va el código de BindEvent:
1
2
3
4
FOR i = 1 TO this.grilla.ColumnCount
	lcCurrentControl = this.grilla.Columns(m.i).currentControl
	BINDEVENT(this.grilla.Columns(m.i).&lcCurrentControl,"KeyPress",thisform,"dlg_Enter")
NEXT

Adapta esto a tu caso y tu necesidad y justifica cada parte con la ayuda de Visual Fox para entender por qué funciona.
Fijate que también se puede disparar otro RaiseEvent en el Destroy del form Hijo para avisarle al padre que se cerró, o que haga tal cosa.
Se necesita crear en el form padre el método respectivo que recibirá la llamada desde el form hijo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad