| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
zankiu Lt Cmdr

Registrado: 23 Ene 2008Mensajes: 106
|
Publicado: Lun 04 Feb, 2008 12:34 pm Asunto: No muestra el Form1 al ejecutarse la aplicación |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 04 Feb, 2008 5:41 pm Asunto: |
|
|
En las opciones puedes especificar cual será el form principal:
MENU: Project -> Options... -> PESTAÑA: Forms -> COMBO: Main form |
|
| Volver arriba |
|
 |
zankiu Lt Cmdr

Registrado: 23 Ene 2008Mensajes: 106
|
Publicado: Mar 05 Feb, 2008 11:28 am Asunto: |
|
|
| 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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 05 Feb, 2008 5:14 pm Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 05 Feb, 2008 5:18 pm Asunto: |
|
|
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 _________________
 |
|
| Volver arriba |
|
 |
|