FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Error TStringList creados en tiempo de ejecución
Hola a todos/as....
Nuevamente consultado... Mi problema es el siguiente, tengo una una FORM en la cual tengo incluidos varios componentes dentro de los cuales esta un Combobox, el cual es llenado desde una consulta, ya que es necesario guardar el identificador de los datos que son almacenados en el Combo, declaro una variable de tipo TStringList en Private, y luego a este le digo que se cree en el evento OnCreate de la Forma de esta manera: Lista := TStringList.Create; Luego lleno los datos tanto en el combo como en la lista que he creado y hasta aqui todo bien. Cuando cierro la Form en el evento OnClose libero la variable: Lista.Free; El problema surge cuando nuevamente quiero entrar a esta forma pués me indica que hay una excepcion con un error en la violación de la dirección, encerre el codigo con el que hago el llamado en try...except pero sigue apareciendo el error Agradezo cualquier idea... |
#2
|
||||
|
||||
¿Podemos ver el código? ¿El OnCreate, el OnClose y el código de llenar el Combo y la Lista? Gracias
Última edición por ixMike fecha: 24-01-2008 a las 16:00:58. |
#3
|
|||
|
|||
bueno puse a que el objeto se creara no cuando se crea la forma sino cuando se abre en el evento OnShow de la Form
y hasta el momento parece funcionar... Gracias "ixMIKE" |
#4
|
||||
|
||||
Cita:
Salu2. |
#5
|
||||
|
||||
Si tus formularios no son creados dinámicamente, es decir solo necesitas llamarlos a través de formulario.show, realiza la creación de la variable en el evento Onshow del formulario.
__________________
Conoce mi blog http://www.edgartec.com |
#6
|
|||
|
|||
Cita:
Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#7
|
|||
|
|||
siguiendo la sugerencia de ixMIKe esto es lo que hago....
Espero que ahora este mucho más claro... saludos! |
#8
|
||||
|
||||
En primer lugar, recomiendo que el TStringList debiera crearse en el OnCreate del formulario y destruirse en el OnDestroy.
En el OnShow basta con que se quede la sentencia Lista.Clear que por ahora está de mas. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#9
|
||||
|
||||
Cita:
suerte
__________________
Conoce mi blog http://www.edgartec.com |
#10
|
||||
|
||||
Francamente no estoy seguro de que querés decir con "dinámico" y "estático", pero tampoco veo cuales son los argumentos para que el StringList se cree en el OnShow.
De hecho, creo que podría ser en ambos... siempre depende.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#11
|
||||
|
||||
Yo opto por el OnCreate, es lo "más seguro para nuestro código", o bien amarrar bien con FreeAndNil la lista, pero es marear la perdiz en este caso. Si queremos tener una lista en memoria a la misma par que un combo, dará igual cargarla después de crear el form que antes de mostrar el form.
Si lo dejas en el OnShow, basta que hagas un : form1.hide; form1.show; form1.hide; form1.show; form1.hide; form1.show; Para crear 3 listas en memoria con los datos repetidos, las 2 primeras listas se quedaran en el limbo de RAM. Y en otro orden..... ¿para qué usas esa lista? ya tienes el combo, podrías utilizarlo para buscar elementos o lo que quieras, mientras no asignes el itemindex del combo, no cambiará la selección del mismo. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 26-01-2008 a las 04:28:55. |
#12
|
||||
|
||||
Cita:
Dinámico: El formulario es creado al vuelo. Antes de iniciar la llamada al formulario debe crearse la instancia. Estático: El formulario es creado al iniciar la aplicación. Al llamarlo, siempre se llama a la misma instancia. Dinámico. Los elementos se destuyen y construyen con el formulario. Estático. Se crean elementos en el evento OnCreate (Elementos creados una sola ocasión) Se destruyen los elementos al cerrar el formulario. Al llamar a la misma instancia, debido a que esta no es creada nuevamente, los elementos a los que se intenta acceder ya no existen pues fueron destruidos al cerrar el formulario. Punto
__________________
Conoce mi blog http://www.edgartec.com |
#13
|
||||
|
||||
Cita:
Cita:
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#14
|
||||
|
||||
Cita:
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#15
|
||||
|
||||
Completo un poquito más:
Y no tiene nada que ver que se creen dinámicamente o estáticamente las ventanas. El ciclo de vida es el mismo para ambos tipos de Forms. En honor a la verdad, poliburro ha detectado el fallo del access violation, pero creo no ha sabido explicarse porque tanto jachguate como yo lo hemos malinterpretado. 1º- Deja el StringList en el oncreate como lo tenías. Liberas la lista en el OnDestroy. 2º- El access violation es problema de cómo usas tus ventanas, no tiene nada que ver con el TStringList. Si tu ventana se llama FrmClientes (por decir algo) y esa variable la usas en todas tus ventanas, en el Onclose añade:
cuando necesites usar la ventana de nuevo, comprueba si ya está abierta:
Si no usas la variable FrmCliente en tu aplicación, es decir, creas las ventanas así:
Entonces no puedes usar el evento OnClose para poner la variable FrmClientes a nil, siempre deberías usar FreeandNil(f) o de la variable que uses. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 26-01-2008 a las 14:00:10. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema con borrado de componentes creados en tiempo de ejecución | harpo | OOP | 5 | 22-12-2007 16:54:55 |
Borrar los Datasource Creados en tiempo de ejecucion | Nieto | OOP | 2 | 29-11-2007 22:12:19 |
Destruir Qrlabels creados en tiempo de ejecucion | Ade | Impresión | 6 | 08-10-2006 19:46:28 |
Eventos en componentes creados en tiempo de ejecucion | joumont | OOP | 3 | 27-12-2005 14:48:23 |
Objetos creados en tiempo de ejecución | Scocc | OOP | 4 | 13-06-2003 20:55:29 |
|