Cómo sincronizar los datos mostrados en ambos formularios diferentes

Seleccione idioma Seleccione idioma
Id. de artículo: 193241 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

Resumen

En algunas circunstancias, es necesario crear dos o más formularios que son independientes entre sí manteniendo los datos mostrados en los formularios sincronizados. Este artículo muestra cómo sincronizar los datos mostrados en dos formularios independientes.

Más información

Para sincronizar la presentación de datos entre dos o más formularios independientes, es necesario llamar al método de actualización de los formularios que contienen los datos que necesita actualizarse. Los métodos disponibles para actualizar un formulario después de mover un puntero de registro son hasta cierto punto depende de cómo se crean instancias del formulario.

El ejemplo siguiente ilustra uso del método Refresh entre dos formularios:

  1. Cree un formulario denominado TEST1 y cambie la propiedad Caption a "empleado Form."
  2. Agregue la tabla EMPLOYEE desde el directorio \\SAMPLES\DATA al entorno de datos del formulario y establezca el ORDER en EMP_ID.
  3. Arrastre los campos siguientes de la tabla EMPLOYEE hasta el formulario:
          EMPLOYEE.EMP_ID
          EMPLOYEE.LAST_NAME
          EMPLOYEE.FIRST_NAME
          EMPLOYEE.TITLE
  4. Agregue el código siguiente al evento de inicialización del formulario:
          DO FORM TEST2
  5. Cree un formulario denominado Test2 y cambie la propiedad Caption a "Buscar forma." Agregue la tabla EMPLOYEE desde el directorio \\SAMPLES\DATA al entorno de datos del formulario y establezca el ORDER en EMP_ID. En el formulario del entorno de datos y establezca los siguientes valores:
          AutoCloseTables=.F.
          AutoOpenTables=.F.
  6. Agregar un control de cuadro de lista tiene los siguientes valores al formulario:
          RowSourceType=6 - Fields
          RowSource=EMPLOYEE.EMP_ID
    							
  7. Agregue el código siguiente al evento Click del control de cuadro de lista:
          IF !EMPTY(THIS.VALUE)
             IF SEEK(RTRIM(THIS.VALUE))
                * Note that TEST1 is the name of the .SCX file created earlier
                test1.REFRESH
             ENDIF
          ENDIF
    							
  8. Guarde el formulario.
  9. Desde la línea de comandos, escriba "DO FORM TEST1" y "Formulario de búsqueda" para mover el puntero de registros de títulos de utilizar el formulario. Tras hacer clic en un valor en el cuadro de lista, actualicen los datos en "Formulario Empleados".
Si el formulario se crean instancias de una definición de clase, actualizar el formulario se convierte en algo más problemática. En este caso, la colección FORMS debe utilizarse para actualizar los formularios de destino.

El código siguiente muestra uso de la colección FORMS para actualizar otro formulario:

  1. Cree un archivo de programa denominado Demo.prg que contiene el código siguiente:
          * Begin Code
          PUBLIC ox
          ox=CREATEOBJECT('SYNCHED1')
          ox.SHOW
    
          DEFINE CLASS synched1 AS FORM
             TOP = 50
             LEFT = 162
             HEIGHT = 160
             WIDTH = 310
             DOCREATE = .T.
             CAPTION = "Employee Form"
             NAME = "Form1"
             AUTOCENTER=.T.
    
             ADD OBJECT lblemp_id AS LABEL WITH ;
                AUTOSIZE = .T., ;
                BACKSTYLE = 0, ;
                CAPTION = "Employee ID", ;
                LEFT = 11, ;
                TOP = 0, ;
                TABINDEX = 3, ;
                NAME = "lblEmp_id"
    
             ADD OBJECT lbllast_name AS LABEL WITH ;
                AUTOSIZE = .T., ;
                BACKSTYLE = 0, ;
                CAPTION = "Last Name", ;
                LEFT = 11, ;
                TOP = 36, ;
                TABINDEX = 5, ;
                NAME = "lblLast_name"
    
             ADD OBJECT lblfirst_name AS LABEL WITH ;
                AUTOSIZE = .T., ;
                BACKSTYLE = 0, ;
                CAPTION = "First Name", ;
                LEFT = 11, ;
                TOP = 72, ;
                TABINDEX = 7, ;
                NAME = "lblFirst_name"
    
             ADD OBJECT lbltitle AS LABEL WITH ;
                AUTOSIZE = .T., ;
                BACKSTYLE = 0, ;
                CAPTION = "Title", ;
                LEFT = 11, ;
                TOP = 108, ;
                TABINDEX = 9, ;
                NAME = "lblTitle"
    
             ADD OBJECT txtemp_id AS TEXTBOX WITH ;
                CONTROLSOURCE = "employee.emp_id", ;
                HEIGHT = 23, ;
                LEFT = 84, ;
                MAXLENGTH = 6, ;
                TABINDEX = 4, ;
                TOP = 0, ;
                WIDTH = 53, ;
                NAME = "txtEmp_id"
    
             ADD OBJECT txtlast_name AS TEXTBOX WITH ;
                CONTROLSOURCE = "employee.last_name", ;
                HEIGHT = 23, ;
                LEFT = 84, ;
                MAXLENGTH = 20, ;
                TABINDEX = 6, ;
                TOP = 36, ;
                WIDTH = 149, ;
                NAME = "txtLast_name"
    
             ADD OBJECT txtfirst_name AS TEXTBOX WITH ;
                CONTROLSOURCE = "employee.first_name", ;
                HEIGHT = 23, ;
                LEFT = 84, ;
                MAXLENGTH = 10, ;
                TABINDEX = 8, ;
                TOP = 72, ;
                WIDTH = 80, ;
                NAME = "txtFirst_name"
    
             ADD OBJECT txttitle AS TEXTBOX WITH ;
                CONTROLSOURCE = "employee.title", ;
                HEIGHT = 23, ;
                LEFT = 84, ;
                MAXLENGTH = 30, ;
                TABINDEX = 10, ;
                TOP = 108, ;
                WIDTH = 218, ;
                NAME = "txtTitle"
    
             PROCEDURE LOAD
                PUBLIC varval
                IF ATC("Visual FoxPro 06.",VERSION())>0
                USE Home(2)+"Employee.dbf"
                Else
                USE home()+"\samples\data\employee"
                ENDIF
                SET ORDER TO TAG emp_id
                GO TOP
                STORE SPACE(LEN(employee.emp_id)) TO m.varval
             ENDPROC
    
             PROCEDURE DESTROY
                FOR i=1 TO _SCREEN.FORMCOUNT
                   * Look for the Search Form in the FORMS collection.
                   IF _SCREEN.FORMS(i).CAPTION="Search Form"
                      * If the Search Form exists, release it
                      _SCREEN.FORMS(i).RELEASE
                   ENDIF
                ENDFOR
                * Close the table.
                SELECT employee
                USE
             ENDPROC
    
             PROCEDURE INIT
                * Launch the Search Form.
                PUBLIC search
                search=CREATEOBJECT('SYNCHED2')
                search.SHOW
             ENDPROC
          ENDDEFINE
    
          DEFINE CLASS synched2 AS FORM
             TOP = 0
             LEFT = 0
             HEIGHT = 118
             WIDTH = 205
             DOCREATE = .T.
             CAPTION = "Search Form"
             NAME = "Form2"
    
             ADD OBJECT list1 AS LISTBOX WITH ;
                ROWSOURCETYPE = 0, ;
                HEIGHT = 96, ;
                LEFT = 24, ;
                TOP = 12, ;
                WIDTH = 145, ;
                NAME = "List1"
    
             PROCEDURE INIT
                THIS.list1.ROWSOURCETYPE=1
                IF USED('EMPLOYEE')
                   SELECT employee
                   currec=RECNO()
                   GO TOP
                   SCAN
                      * Load the list box with data from the table.
                      THIS.list1.ADDLISTITEM(employee.emp_id)
                   ENDSCAN
                   GOTO currec
                ENDIF
             ENDPROC
    
             PROCEDURE list1.CLICK
                IF !EMPTY(THIS.VALUE)
                   SELECT employee
                   IF SEEK(RTRIM(THIS.VALUE))
                      * Move the record pointer
                      FOR i=1 TO _SCREEN.FORMCOUNT
                         * Look for the Employee Form in the FORMS collection.
                         IF _SCREEN.FORMS(i).CAPTION="Employee Form"
                            * If the Employee Form exists, Refresh it
                            _SCREEN.FORMS(i).REFRESH
                         ENDIF
                      ENDFOR
                   ENDIF
                ENDIF
             ENDPROC
    
             PROCEDURE DESTROY
                FOR i=1 TO _SCREEN.FORMCOUNT
                   * Look for the Employee Form in the FORMS collection.
                   IF _SCREEN.FORMS(i).CAPTION="Employee Form"
                      * If the Employee Form exists, release it
                      _SCREEN.FORMS(i).RELEASE
                   ENDIF
                ENDFOR
             ENDPROC
          ENDDEFINE
          * End Code.
    							
  2. Desde la línea de comandos, escriba "DEMO DO" y "Formulario de búsqueda" para mover el puntero de registros de títulos de utilizar el formulario. Después de hacer clic en un valor en el cuadro de lista, actualicen los datos en el formulario empleado.

Referencias

(c) Microsoft Corporation 1998. Todos los derechos reservados. Contribuciones por John Desch, Microsoft Corporation

Propiedades

Id. de artículo: 193241 - Última revisión: domingo, 23 de febrero de 2014 - Versión: 2.2
La información de este artículo se refiere a:
  • Microsoft Visual FoxPro 3.0b para Macintosh
  • Microsoft Visual FoxPro 3.0 Standard Edition
  • Microsoft Visual FoxPro 3.0b Standard Edition
  • Microsoft Visual FoxPro 5.0 Standard Edition
  • Microsoft Visual FoxPro 5.0a
  • Microsoft Visual FoxPro 6.0 Professional Edition
Palabras clave: 
kbnosurvey kbarchive kbmt kbcode kbhowto KB193241 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 193241

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com