SoloCodigo

Programación General => C/C++ => C++ Builder => Mensaje iniciado por: Devilcpc en Lunes 7 de Junio de 2004, 21:50

Título: Pequeño Problema
Publicado por: Devilcpc en Lunes 7 de Junio de 2004, 21:50
Buenas

Tengo un problema, tengo 2 formularios (Form1 y Form2), el Form1 tiene un Edit (Edit1) y un Boton (Button1), el Form2 tiene un boton (Button2), basicamente lo q quiero hacer es q en el Form1 al tocar el boton se muestre el Form2 y si en el Edit escribí op, el boton del Form2 tiene q estar permitido, de lo contrario no...

yo lo hago con una variable global, pero no funciona:

Código: Text
  1.  
  2. //Esto en el Form1
  3. void __fastcall TForm1::Button1Click(TObject *Sender)
  4. {
  5.  if (Edit1->Text == "op")
  6.   variable=1;   //Variable declarada en el .h como publica
  7.  else
  8.   variable=0;
  9.  
  10. Form2->ShowModal();
  11.  
  12. }
  13.  
  14. //Esto en el Form2
  15. void __fastcall TForm2::FormCreate(TObject *Sender)
  16. {
  17.  if (Form1->variable == 1)
  18.   Button1->Enabled = true;
  19.  else
  20.   Button1->Enabled = false;
  21. }
  22.  
  23.  

aclaro que inclui los correspondientes Unit.cpp en cada formulario, no me da erros pero la variable es como si siempre tuviera el valor de 0.

Saludos

Adrian
Título: Re: Pequeño Problema
Publicado por: lordford en Martes 8 de Junio de 2004, 04:00
Hola:

intenta esto, la explicacion no la se, ya algun otro usuario la dara, la verdad es que no se por que no funciona, aqui te pongo un ejemplo, asi si lo hace.

Código: Text
  1. void __fastcall TForm1::Button1Click(TObject *Sender)
  2. {
  3.  
  4.         variable = 0;
  5.  
  6.         if (Edit1->Text == "op")
  7.         {
  8.                  variable=1;
  9.                  Form2->Button1->Enabled = 1;
  10.         }
  11.         else
  12.         {
  13.                 variable = 0;
  14.                 Form2->Button1->Enabled = 0;
  15.         }
  16.  
  17.         Form2->ShowModal();
  18.  
  19. }
  20.  

Salu2,

 :smartass:  :hola:  B)  :lol:

LordFord
Título: Re: Pequeño Problema
Publicado por: Amilius en Martes 8 de Junio de 2004, 06:12
Cita de: "Devilcpc"
Buenas

Tengo un problema, tengo 2 formularios
Bla bla bla bla bal

bla bla

bla
 :blink:

¿Por que lo pusiste en el Create?

void __fastcall TForm2::FormCreate(TObject *Sender)

Esa ventana no se creará cada vez que presiones el otro botón, por que sólo se "mostrará" (según tu código), pero ya estará creada al principio. Por eso cambiar al valor de tu variable no pasara NADA.
Título: Re: Pequeño Problema
Publicado por: ChangSoft en Martes 8 de Junio de 2004, 10:54
Ya que tengas tus dos ventanas o form hechos el Form1 con el edit y el buton (Edit1 y Button1) en el Form2 con el boton (Button1)


Ahora presiona Alt+F11 en uno de los forms (si es el form1 agrega el form2) y haces lo mismo con el otro form.

Hora en el archivo .h (Ctrl+F6) del form1 (o donde se encuentre tu Edit1) creo una variable de tipo "bool" donde en la parte de hasta abajo donde dice public...

Ejemplo:
   
.....Public:
              bool check;

Ahora bien dale doble click al button1 de tu form1 y poner el codigo:
     
if(!StrComp(Edit1->Text.c_str(),"OP"))
 {
  check=1;
 Form2->ShowModal();
 }

Ahora bien en la forma2 en los Eventos, dale en  FormActivate (doble click) te pondra algo entre llaves y pones:

if(Form1->Check)
 Button1->Enabled=true;



espero te sirva ok!!!
Título: Re: Pequeño Problema
Publicado por: Devilcpc en Miércoles 9 de Junio de 2004, 00:27
Lo hice tal cual como decis pero no funciona, el boton esta siempre permitido....
??
Título: Re: Pequeño Problema
Publicado por: Devilcpc en Miércoles 9 de Junio de 2004, 00:42
La forma que usa lordford si funciona, gracias...
aunq se complica mas ya q hay q hacer todo el codigo en un formulario..

saludos  :hola:
Título: Re: Pequeño Problema
Publicado por: AURED en Jueves 10 de Junio de 2004, 01:30
Si quieres mantener tu forma original y no usa la de lordford prueba a sustituir el evento OnCreate del form2 por el evento OnShow y coloca alli el código que has escrito....funciona.
Título: Re: Pequeño Problema
Publicado por: Devilcpc en Viernes 11 de Junio de 2004, 01:10
tenes razon ahi me funcionio

Gracias AURED y a los otros tamb
Título: Re: Pequeño Problema
Publicado por: QliX=D! en Viernes 11 de Junio de 2004, 07:20
Es mas semasmasticamente correcto (o sea correcto para C++ :P) que sobrecarges el metodo Showmodal del form2, y le agreges el aprametro que corresponde a tu variable global "check", quedaria algo asi:


Código: Text
  1. int __fastcall TForm2::ShowModal(bool check)
  2. {
  3.     Boton1->Enabled = check; //si es true, si, si no, no.
  4. }
  5.  
  6. //Y en el .h del TForm2 agregas:
  7.  
  8. class .....
  9. {
  10. public:
  11. ....
  12. ....
  13.   int __fastcall ShowModal (bool chcke);
  14. ...
  15. ...
  16.  
  17. }
  18.  
  19.  
  20. //Entonces despues desde form1 podes usar:
  21.  
  22. if (Edit1->Text == "op")
  23.   Form2->ShowModal (true);
  24. else
  25.   Form2->ShowModal (false);
  26.  

Y listo, no es tan complejo, es ams claro, mas orientado a objetos, y menos riesgoso que tener una global.

Saludos.