Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Acceder a componentes creados dinámicamente

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Acceder a componentes creados dinámicamente Responder citando

Hola a todos, tengo un pequeño problema. Tengo un formulario en el que hay un page control con un TTabSheet, y yo puedo crear y/o eliminar TTabSheet dinámicamente pinchando en un botón. Dentro de cada TTabSheet creo dos etiquetas y dos TDateTimePicker a uno de estos le pongo el tag a 1 y al otro a 0 para distinguirlos

Bien, el tema es que cuando quiero obtener los valores de estos TDateTimePicker lo que hacía era recorrer las páginas de y dentro de cada página tenía pensado recorrer los componentes de éste y si son del tipo TDateTimePicker en función del tag lo guardaría en un campo o en otro. El problema viene porque cuando accedo a la propiedad ComponentCount de la página me dice que es 0, que no hay ninguno. Os dejo el código que utilizo para crear los componentes a ver si veis algo raro (lo hago de memoria con lo que podría haber algún error)

Código:
dtInicio = new TDateTimePicker(TabSheet);
dtFin = new TDateTimePicker(TabSheet);
dtInicio->Tag=0;
dtFin->Tag=1;
// código para posicionar y redimensionar los componentes
dtInicio->Parent=TabSheet;
dtFin->Parent=TabSheet


creo que eso es lo más relevante, ¿tendría que hacer algo más para que lo considerara un componente de la hoja?En caso de que no se pueda hacer ¿la única solución sería recorrer todos los componentes del formulario y buscar los TDateTimePicker y de ellos coger la hoja (en función de la hoja lo guardaré en un sitio o en otro)?Se les ocurre otra manera?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola xaquin,

la idea de la solución que te planteo es capturar la fecha en el momento que esta es seleccionada, manejando el Sender del componente utilizado.

Me base en tu ejemplo para crear los componentes y todo bien.

Al final de tu codigo le agregue dos líneas

Código:

dtInicio->OnChange = DateTimePickerChange;
dtFin->OnChange = DateTimePickerChange;


La función que ves arriba definida DateTimePickerChange es una función que tenes que definir vos, en tu parte privada o publica del formulario asi:

Código:

TDate ini, fin;
void __fastcall DateTimePickerChange(TObject *Sender);


Tambien definí, dos variables (ini, fin) que van a capturar la fecha selecionada.

Por último implementas la función que captura el evento DateTimePickerChange:

Código:

void __fastcall TForm1::DateTimePickerChange(TObject *Sender)
{
  TDateTimePicker* DateTimeActual = dynamic_cast<TDateTimePicker*>(Sender);
  if (DateTimeActual->Tag)
    fin = DateTimeActual->Date;
  else
    ini = DateTimeActual->Date;
}


En resumen, lo que digo es que cuando, se genere el evento OnChange de cualquier componente creado dinámicamente me llame a mi método DateTimePickerChange.

Dentro del metodo hago un cast para convertir el Sender en un TDateTimePicker y poder tomar la fecha. La almaceno de acuerdo a su tag como vos querias

Espero que te sirva para basarte en esto

Suerte
Volver arriba
Mensaje    Asunto: Responder citando

Me olvide de loguearme antes de escribir lo de arriba

Very Happy
_________________
Crandel

"hay 10 tipos de personas, las que ven en binario y las que no"

Angel Zeitoune - Artículo: Generación de eventos en C++Builder
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Muchas gracias por la respuesta, no lo había pensado y me hubiera servido, pero al final lo solucioné porque era un error de concepto, resulta que lo que había dentro del TabSheet no eran componentes, sino controles, con lo que sólo tengo que recorrer los controles que hay en el TabSheet y en función del tag cojo los valores de la fecha de inicio y la de fin

Muchas gracias Crandel por la respuesta
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.