![]() |
Eliminar un tabsheet de un Page Control
Creo un nuevo tabsheet en un page control y en el creo un formulario poniendole como parent este tabsheet. El formulario lo muestro con Show. Cuando cierro el formulario, como puedo eliminar el tabsheet en el que estaba contenido?
|
Usa una variable en el formulario que contiene al PageControl para guardar una referencia a la ficha:
Código:
TForm1 = class Código:
Tab := TabSheet.Create(nil); Tab.Free // Saludos |
mi problema lo tengo por que creo un Form2 al que le asigno como parent ese tabsheet y como lo muestro con show (no como show modal) no sé cuando es eliminado form2 y no sé cuando tengo que hacer:
Cita:
|
Hola apicito, despues de crear tu tabsheet (como te explicó Román) al cerrar el form2 usa el siguiente código:
Código:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); Saludos |
La solución que me propone Ruben_Cu cierra la última instancia de Tab que se ha creado, por ello lo he intentado con un array de tabSheets de esta forma.
Código:
FORM1 |
Hola apicito, para evitar el error debes declararle un tamaño al array por ejemplo:
Código:
Tab : array[1..5] of TTabSheet; No entiendo bien porque quieres el mismo form2 repetido en todos los tabsheet:confused: ...tu sabrás. Puedes eliminar el uso de la función TRIM que en este caso no hace nada. Saludos y suerte |
Gracias, funcionó correctamente.
Cita:
Un saludo. |
Cita:
Otra manera sería utilizar arrays dinámicos y inicializarlos con SetLength (la ayuda sobre los arrays dinámicos que trae una buena explicación). |
Alguien puede decirme porque si, en vez de utilizar el array de tabs ya creados, utilizo el sistema de crear los tabs cuando abro el form2 con el metodo:
Código:
procedure TForm1.Boton1Click; Código:
procedure Form1.Boton1Click; |
Cita:
Saludos |
Cita:
// Saludos |
Cita:
Respecto a las lineas de código que envía el amigo apicito, pues la verdad no entiendo porque un código funciona y el otro no :confused: |
Cita:
Saludos |
Cita:
Haciendo unas pruebas me dió lo siguiente:
Y, desde luego, si habilitamos la opción "Range check error" del compilador entonces se genera un error durante la ejecución antes de acceder a parte prohibidas de la memoria. El punto aquí es (en mi opinión): Evítense prácticas incorrectas de programación aún cuando no parezca haber errores. // Saludos |
Cita:
Cita:
|
Cita:
Voy a especular porque yo de esto no sé nada: [especular] Dependiendo de donde se declare la variable ésta se colocará en distintos segmentos de memoria. Algunas se colocan en el segmento de código (CODE segment) de manera que al escribir en una dirección que no nos corresponde se genera el "Access Violation" al intentar escribir sobre la parte de memoria donde se pone el código cuando el programa se carga en memoria. En otras ocasiones se colocara en un segmento especial para datos (DATA segment) y, si no hay nada contiguo y se trata de un área que el manejador de memoria de Delphi ya reservó pues no pasará nada grave. [/especular] Aquí te pongo una prueba rápida que hice: Inmediatamente después de la declaración del formulario declara lo siguiente: Código:
var Código:
I := 6; 84 Suena lógico ¿no? Ficha[6] accedió a la parte de la memoria inmediatamente después del arreglo Fichas. Y ahí estaba la variable Prueba. No causa error pues es sólo el valor de una variable que se afecta pero desde luego ¡está mal! No es que el compilador a veces marque errores y a veces no. Es que depende de muchas circunstancias, de qué código tengamos. El ejemplo anterior muestra que no veremos ningún error pero cuando nuestro programa muestre cosas raras por la alteración del valor de la variable Prueba, pasaremos ratos difícilies (¿estimulantes?) intentando encontrar la falla. Por eso, repito, debemos ajustarnos a la programación correcta pues no tiene caso intentar averiguar de qué manera está funcionando el compilador. // Saludos |
La franja horaria es GMT +2. Ahora son las 02:14:28. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi