Page 1 of 1

Boton en el get

Posted: Mon Jul 20, 2009 12:53 pm
by Pedro
Hola amigos del foro

Tengo un problema con los gets que usan un botón para buscar.
El problema es que cuando vuelve de la búsqueda se queda en su casilla hasta que se de enter o flecha abajo. Bueno eso no es muy molesto, pero si el siguiente get tiene también un botón y lo pulsamos, :lol: (aqui viene la risa) el solito vuelve al get anterior. Veamos, que no baje al siguiente get y haya que darle enter vale, pero que en el segundo get se suba, eso me mosquea, ¿a alguien le ha pasado? . Abajo os dejo el código de lectura de los gets pos si alguno ve algo que no he visto.

Code: Select all

*-------------------------------------------------------------------------------
function CtrCliSer( nEvent, oDClSer, oDServi, oDClie )
*-------------------------------------------------------------------------------
local oDlg
Local oGet[4]
    
    ASIZE(aDatSer,CLIS->(Fcount()))
    AFILL(aDatSer,.t.)
    CLIS->(IniCampo(aDatSer))
    CLIS->(TabCampo(aDatSer,0))
    
    if nEvent == ID_ALT
       CLIS->(IniCampo(aDatSer))
    EndIf
    DEFINE DIALOG oDlg RESOURCE "DLGMCLSER" FONT oFont

      REDEFINE GET oGet[1] VAR aDatSer[1] ID 201  PICTURE "99999" ;
             BITMAP "BUSCAR1" ACTION (aDatSer[1]:= BusSCli(oDClie,oDlg),;
             oGet[1]:Refresh()  ) ; 
             Valid CliSerN(oDlg,nEvent);
             OF oDlg UPDATE
      REDEFINE GET oGet[2] VAR aDatSer[2] ID 202  PICTURE "9999" ;
             BITMAP "BUSCAR1" ACTION (aDatSer[2]:= BusSer(oDServi,oDlg),;
             oGet[2]:Refresh()) ;  
                 Valid SerCliN(oDlg,nEvent);
             OF oDlg UPDATE
      REDEFINE GET oGet[3] VAR aDatSer[3] ID 203  PICTURE "@K!" OF oDlg UPDATE
      REDEFINE GET oGet[4] VAR aDatSer[4] ID 204  PICTURE "99,999.99" OF oDlg UPDATE

      REDEFINE BUTTON ID 101 OF oDlg ;
               ACTION ALTASERVI(nEvent), oDlg:End()

      REDEFINE BUTTON ID 102 OF oDlg ;
               ACTION CLIS->(IniCampo(aDatSer)), oDlg:aControls[ 1 ]:SetFocus(), oDlg:UpDate()

      REDEFINE BUTTON ID 103 OF oDlg CANCEL ACTION oDlg:End()

    ACTIVATE DIALOG oDlg ON PAINT oDlg:aControls[ 1 ]:SetFocus() CENTERED

return( nil )
 
En las funciones BusSCli y BusSer hay dos listbox que retornan el código de un cliente o de un servicio que posteriormente se validan.

Espero vuestras noticias

Re: Boton en el get

Posted: Mon Jul 20, 2009 2:11 pm
by Lautaro
Pedro,

Creo que aqui esta tu error :

ACTIVATE DIALOG oDlg ON PAINT oDlg:aControls[ 1 ]:SetFocus() CENTERED
 

Cada vez que se repinta tu dialogo le das el foco al primer get ( odlg:acontrols[1] ).

Atte.,

Lautaro Moreira
Osorno
Chile

Re: Boton en el get

Posted: Mon Jul 20, 2009 4:12 pm
by ADBLANCO
DEBERÍA USAR ON INIT , NO ON PAINT

Re: Boton en el get

Posted: Mon Jul 20, 2009 4:45 pm
by Pedro
Gracias a los dos, funcionó, pero el poner ON INIT en vez de ON PAINT ¿es por los botones?, porque eso mismo tengo en otros diálogos y no me hace el tema de irse al primer get. Si es por el tema de los botnes en el get, bueno pues lo tendré en cuenta para la próxima vez.

De nuevo gracias.