FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Clase TghObjList
Mantiene una lista de objetos a los que permite aplicar varios tipos de tareas de forma fácil y segura.
Unidad GHFObjList Declaración Descripción La clase TghObjList extiende las características de su clase padre, la nativa TObjectList, añadiendo diversas funcionalidades:
En TghObjList todas las enumeraciones son seguras, en el sentido de que a la lista se le pueden agregar o eliminar objetos durante el proceso de enumeración, sin que por ello se incurra en violaciones de acceso o se pase por alto ninguno de los objetos que se mandó enumerar (mientras éstos sigan en la lista). Ejemplo comparativo Suponga que tenemos un formulario con varios componentes TEdit y un botón, y hemos implementado el evento OnChange del segundo TEdit (Edit2) y el evento OnClick del botón: El código anterior utiliza el evento OnChange del cuadro de texto Edit2 para validar si éste ha quedado vacío, en cuyo caso destruye el cuadro de texto Edit1, muestra un mensaje al usuario y se asegura de que el foco quede en Edit2. El segundo manejador de eventos se ejecuta cuando el botón es presionado. Se trata de un típico ciclo "ComponentCount - 1 DownTo 0" sobre los componentes del formulario, cuyo propósito en este ejemplo es llamar al método Clear de cada objeto TEdit, es decir, el código de Button1Click es para poner en blanco todos los edits. El código funciona, pero surge un problema: Cuando el ciclo llama al método Clear de Edit2, disparándose con ello el manejador de eventos Edit2Change con la esperada destrucción del objeto Edit1, los componentes del formulario se reacomodan en su lista interna representada por la propiedad Components, de tal manera que Edit2 se mueve de la posición n a la posición n - 1. Esto causa que la siguiente pasada del ciclo For se ejecute nuevamente con el mismo componente (Edit2), derivando en una segunda llamada al método Clear de ese objeto, y por consecuencia una segunda e innecesaria ejecución del manejador Edit2Change (dos veces se muestra en pantalla el mensaje "You must enter a value for Edit2"). El recorrido de objetos mediante simples ciclos ascendentes (0 To Count - 1) o descendentes (Count - 1 DownTo 0) es útil y seguro en gran cantidad de casos, pero no así cuando alguna de las pasadas del ciclo tiene el potencial del alterar el contenido de la lista recorrida. TghObjList ofrece un mecanismo de enumeración que inicia con una "toma instantánea" de los objetos a recorrer (emplea para ello una lista interna auxiliar), de tal suerte que el proceso es seguro contra agregaciones, eliminaciones o reacomodos ocurridos durante el mismo. El siguiente sería el código para el manejador de eventos Button1Click, usando enumeración segura con TghObjList. Sólo una vez se llama al método Clear de Edit2, y por ende sólo una vez se dispara Edit2Change.
Última edición por Al González fecha: 20-10-2013 a las 17:47:09. Razón: Enmendar errata |
#2
|
||||
|
||||
Muchas gracias por el aporte, maestro
|
#3
|
||||
|
||||
Interesante
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#4
|
||||
|
||||
Estos son los pequeños ejemplos que le faltan a la biblioteca para que despeguen definitivamente.
Y algún pequeño ejemplo práctico de uso. Gracias Al
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Creacion de una clase | mierda | OOP | 8 | 07-06-2011 09:39:33 |
Pasar mi clase a una clase de 3 capas o lo mas parecido | elarys | OOP | 2 | 08-04-2011 00:02:54 |
clase que contiene otra clase definida de forma posterior | astwin | OOP | 5 | 20-02-2009 12:26:55 |
Clase | jakuna | OOP | 2 | 30-08-2007 22:50:35 |
...la clase... | Jure | Humor | 0 | 27-07-2004 21:00:47 |
|