Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-05-2006
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
A ver si...

Hola a todos, trataré de ayudar en este tema, creo que para entender el por qué del uso de downto debemos tener en cuenta lo siguiente:
1º El TPageControl mantiene un arreglo indexado de sus TabSheets.
2º Es imposible acceder al índice de un supuesto elemento que sea mayor que el mayor índice del arreglo, sencillamente no existe (esto es válido para todos los arreglos incluyendo los TStrings toda su descendencia).
Ahora bien en este caso ocurre que:
Cuando se comienza a iterar en el For el valor la variable i desde 0, como sabemos, se incrementa en uno y al ejecutar la declaración de liberar (Free) el TabSheets entonces la propiedad PageCount se refresca a la nueva cantidad de elementos del arreglo, que por supuesto es uno menos que en la iteración anterior.
Y así sucesivamente hasta el momento en que el valor de i sea igual al valor de la propiedad PageCount justo en ese punto vas a querer destruir un TabSheets que no existe, dicho de otra manera un elemento indexado del array que no existe, y por tanto lanzará la excepción.
En el caso del uso del downto este fenómeno no ocurre puesto que siempre la propiedad PageCount tendrá un valor superior a 0 y al destruir la última pestaña será igual a 0. De esta forma se asegura que el error nunca ocurrirá.
Nota que esto solo ocurre en el caso de destrucción de las pestañas, en otros casos se puede usar sin dificultades el For … to … do para el PageControl
Hice un esfuerzo para tratar de explicarme, ya me comentarán si lo logré.
Saludos
Responder Con Cita
  #2  
Antiguo 25-05-2006
esocrates esocrates is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 210
Poder: 22
esocrates Va por buen camino
Muchas gracias dec y Ruben_cu por las respuestas.
La explicación de Ruben_cu me aclaró bastante las dudas y por qué el problema se resolvía de este modo:


Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
begin
  for i:= 0 to pagecontrol1.PageCount-1  do
  begin
  if pagecontrol1.Pages[i].Name ='pepe'  then
     break;//interrumpe el ciclo


  PageControl1.Pages[i].Free;

   Button2.Enabled:=false;//Para evitar otro evento que lanzaría un error
  end;

end;

Un saludo

Última edición por esocrates fecha: 25-05-2006 a las 03:38:46.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
PageControl {El Muy Mencionado} GeoAvila Varios 6 01-03-2007 13:37:19
Uso de PageControl con ImageList sabinajoa OOP 2 16-12-2005 16:01:52
Pagecontrol emiliu Varios 3 02-12-2005 07:59:23
Bordes de un PageControl roman OOP 3 08-09-2004 08:56:49
Pagecontrol Fita Varios 2 21-12-2003 05:07:03


La franja horaria es GMT +2. Ahora son las 09:43:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi