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 

No muestra el Form1 al ejecutarse la aplicación

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: No muestra el Form1 al ejecutarse la aplicación Responder citando

Hola a tods! tengo una dudilla...

tengo un Form1 en el cuál tengo un botón, mediante el evento OnClick llamo a:

Código:
Form2->ShowModal();


que me muestra un segundo formulario Form2 que contiene un ListBox1, en el Unit2.cpp:

Código:
void __fastcall TForm2::FormCreate(TObject *Sender)
{
 MiClass * mio = new MiClass ();
 mio -> GetAlgo();
 delete mio;
}


Con esto, se supone que cuando clickeo al boton del Form1 y me muestra Form2 directamente llama al método GetAlgo de la clase MiClass que está contenido en un Unit3

y en el Unit3.cpp:

Código:
void MiClass::GetAlgo()
{

...
   for (        )
   {
    cadena = .....
    Form2->ListBox1->Items->Add(cadena);  //con esto me va me va añadiendo las líneas que haga el for
   }
 
  if (Form2->ShowModal() == mrOk) //En el Form2 tengo un BitBtn1 con Kind bkOK
   {
     int num=Form2->ListBox1->ItemIndex;

     if (num==1)
     {
      ShowMessage("algo");
     }
     if (num == 2)
     {
     }
  }
...
}


Lo que creo que debería hacer el código es:

1.Ejecutar el .exe
2.Mostrarme el Form1
3.Darle el botón del Form1
4.Mostrarme el Form2 que hace que se ejecute el método GetAlgo() de la clase MiClass
5.Sse rellena de lineas el ListBox, seleccionar una de ellas
6.Dependiendo cuál he seleccionado, mostrarme lo que yo quiera.

Pero lo que hace cuando ejecuta el código es mostrarme el Form2, (no el Form1 que es quien debe iniciar la aplicación).

Alguien sabe porqué?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

En las opciones puedes especificar cual será el form principal:

MENU: Project -> Options... -> PESTAÑA: Forms -> COMBO: Main form
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Cita:
En las opciones puedes especificar cual será el form principal:

MENU: Project -> Options... -> PESTAÑA: Forms -> COMBO: Main form


Eso lo miré y está bien, puede ser porque tengo...:

Código:
void __fastcall TForm2::FormCreate(TObject *Sender)
{
 MiClass * mio = new MiClass ();
 mio -> GetAlgo();
 delete mio;
}


y llama a la función GetAlgo cuando se crea el Form2 y que puede estar creado sin que en Form1 haya pulsado el botón de Form2->ShowModal(); ?

y por eso se me ejecuta primero la función GetAlgo(); de la clase MiClass y luego me aparece el Form1?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Revisando más detenidamente tu código… Si te fijas en las propiedades del proyecto:

MENU: Project -> Options... -> PESTAÑA: Forms -> LISTA: Auto-create forms

Todos los forms que están en la parte izquierda son creados al inicio del programa (aunque permanezcan ocultos) por lo que el evento 'OnCreate' del Form2 se llama desde el principio del programa y de ahí todo el lio.


La forma más sencilla que se me ocurre de corregirlo sin tocarte mucho el código es, en las opciones del proyecto (en Auto-create forms) mueve el Form2 a la lista de la derecha, para que no se "autocree".

Y luego solo tendrías que modificar el código del 'OnClick' del botón que tienes en el Form1, sustituimos:
Código:
Form2->ShowModal();

por lo siguiente:
Código:
Application->CreateForm(__classid(TForm2), &Form2);
delete Form2;


Aunque en mi opinión, sabiendo esto, deberías diseñarlo de otra manera para no tener que hacer estos líos..
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Intenta Crear el Form en otra parte pues lo que estas haciendo segun veo en tu código es crear un form en un lugar donde aun no existe.

Es como darle una paleta a un niño, cuando el padre de este aún no ha nacido.

según tu codigo estas tratando de mostrar un Form "MiClass" pero no espesificas a quien pertenece new MiClass(?) y esto sucede pues el padre (que seria TForm2) aún no ha sido creado.

Si puedes usar el evento OnActivate del TForm2 que puede ser una solución a tu problema.

Saludos
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
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.