Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > .NET
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-12-2005
SMTZ SMTZ is offline
Miembro
 
Registrado: nov 2003
Posts: 225
Poder: 21
SMTZ Va por buen camino
Question Imposible hacer visible un form desde otro form

Buenas, algo que era muy sencillo realizar con Win32, lo veo imposible hacer con .NET.

Si en Win32 quería hacer visible un form ya creado desde otro form, únicamente tenía que teclear:

Código:
Unit Unidad1;

uses
   Unidad2;

...
FormUnidad2.Visible := True;
...
En Cambio, en .NET no puedo realizar esto y he probado lo siguiente:

Código:
...
FormUnidad2.Visible := True; --> La propiedad "visible" no la encuentra
FormUnidad2.Create.Visible := True --> Va creando forms nuevos
FormUnidad2.ActiveForm.Visible := True --> Como la form activa es la de la unidad1, no hace nada porque ya es visible.
With Sender As Form2Unidad2 Do Visible := True --> Da el error "specified cast is not valid"
...
¿Permite .NET actuar sobre las propiedades de un form ya creado desde otro form?

Gracias.
Responder Con Cita
  #2  
Antiguo 27-12-2005
SMTZ SMTZ is offline
Miembro
 
Registrado: nov 2003
Posts: 225
Poder: 21
SMTZ Va por buen camino
Lightbulb Solucionado

Si dentro de la unidad1 defino una variable F2 del tipo Form2, puedo ejecutar:

Código:
Uses
   Unidad2;

Var
   F2 : Form2;

...

// Por ejemplo, en el evento onload de Form1
F2 := Form2.Create; --> Creo Form2 al cargarse Form1

//Por ejemplo, en el evento onclick de un botón de Form1
F2.Visible := Not F2.Visible;

...

Saludos.
Responder Con Cita
  #3  
Antiguo 27-12-2005
SMTZ SMTZ is offline
Miembro
 
Registrado: nov 2003
Posts: 225
Poder: 21
SMTZ Va por buen camino
Question No siempre es valido

Este procedimiento es valido para los forms que creemos manualmente pero, por ejemplo, si se trata del form principal de la aplicación, que se crea automáticamente, ya no es valido, ya que al llamar al método create, crearía otro nuevo form igual que el que ya tenemos, y eso no interesa.

¿Alguien sabe cómo acceder a un form ya creado? Los componentes "normales", como un botón, tienen la propiedad Handle (creo que por ahí van los tiros), pero no un form, por lo que no sé cómo puedo manejar desde otro form las propiedades de un form creado previamente a este.

Gracias.
Responder Con Cita
  #4  
Antiguo 27-12-2005
Avatar de edgusano
edgusano edgusano is offline
Miembro
 
Registrado: abr 2004
Ubicación: Medellin Colombia
Posts: 180
Poder: 20
edgusano Va por buen camino
La aplicacion que realizas que tipo es: ( mdi, sdi . ..)
__________________
Optimus Prime
Responder Con Cita
  #5  
Antiguo 28-12-2005
SMTZ SMTZ is offline
Miembro
 
Registrado: nov 2003
Posts: 225
Poder: 21
SMTZ Va por buen camino
Post Nuevo form independiente

No es MDI, simplemente es un nuevo form independiente de la misma aplicación.
Responder Con Cita
  #6  
Antiguo 30-12-2005
[Gunman] [Gunman] is offline
Miembro
 
Registrado: dic 2004
Ubicación: Pedreguer.
Posts: 355
Poder: 20
[Gunman] Va por buen camino
Formulario.Show;
o
Formulario.ShowModal;
(almenos en delphi para Win32 es así, prueba a ver...);
__________________
l2prog.co.nr
Responder Con Cita
  #7  
Antiguo 30-12-2005
SMTZ SMTZ is offline
Miembro
 
Registrado: nov 2003
Posts: 225
Poder: 21
SMTZ Va por buen camino
Ya lo probé

Hola, para .NET la cosa iría así Formulario.Create.Show, pero es que el formulario ya está creado, no necesito crearlo otra vez, que es lo que hace y acabo llenando la pantalla de formularios repetidos, jeje.
Responder Con Cita
  #8  
Antiguo 30-12-2005
[Gunman] [Gunman] is offline
Miembro
 
Registrado: dic 2004
Ubicación: Pedreguer.
Posts: 355
Poder: 20
[Gunman] Va por buen camino
Y sin .Create no se puede?
__________________
l2prog.co.nr
Responder Con Cita
  #9  
Antiguo 30-12-2005
SMTZ SMTZ is offline
Miembro
 
Registrado: nov 2003
Posts: 225
Poder: 21
SMTZ Va por buen camino
Hay otra manera pero tampoco funciona

En vez de Crete, se puede utilizar ActiveForm, pero es que no puedes forzar a que el formulario activo sea el que tu quieras, sino el que es el que ya está activo.
Responder Con Cita
  #10  
Antiguo 02-01-2006
Avatar de edgusano
edgusano edgusano is offline
Miembro
 
Registrado: abr 2004
Ubicación: Medellin Colombia
Posts: 180
Poder: 20
edgusano Va por buen camino
Me imagino que en .Net debe haber un contenedor de controles a nivel de aplicacion, asi accediendo a este se podria preguntar si esta creado y asi activarlo en vez de crearlo, esto lo he hecho en aplicacion mdi, pero el contenedor lo tiene el form padre, pero en tu caso no es MDI, pero supongo que debe haber un contenedor de nivel superior es decir aplicacion, en fin buscare y si algo pos aqui te coloco el post
__________________
Optimus Prime
Responder Con Cita
  #11  
Antiguo 03-01-2006
BenjiRock BenjiRock is offline
Registrado
 
Registrado: may 2003
Ubicación: Málaga
Posts: 4
Poder: 0
BenjiRock Va por buen camino
No he entendido bien tu pregunta, pero si lo que quieres es traer una ventana, ya creada, al frente es asi:

public void MakeOnTop()
{
Form1.TopMost = true;
}

esta informacion esta sacada de la msdn.
http://msdn.microsoft.com/library/spa/default.asp

Busca:

Mantener un formulario Windows Forms en primer plano.
Responder Con Cita
  #12  
Antiguo 03-01-2006
SMTZ SMTZ is offline
Miembro
 
Registrado: nov 2003
Posts: 225
Poder: 21
SMTZ Va por buen camino
Post No es eso

No, lo que intento hacer es poner en "enable = true", por ejemplo, un form ya creado pero que no está activo desde .NET.
Responder Con Cita
  #13  
Antiguo 03-01-2006
SMTZ SMTZ is offline
Miembro
 
Registrado: nov 2003
Posts: 225
Poder: 21
SMTZ Va por buen camino
Post Vuelvo a explicarlo

Hola, creo que en los posts anteriores no me he explicado del todo bien, por eso vuelvo a explicar el problema que tengo desde el principio. Imaginemos dos unidades. La unidad 1 contiene un formulario que quiero activar desde la unidad 2.

Código:
UNIDAD1
=======

type
  TWinForm = class(System.Windows.Forms.Form)
  {$REGION 'Designer Managed Code'}
  strict private
    Components: System.ComponentModel.Container;
    procedure InitializeComponent;
  {$ENDREGION}
  strict protected
    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    procedure Dispose(Disposing: Boolean); override;
  private
    { Private Declarations }
  public
    constructor Create;
  end;
Código:
UNIDAD2
=======

...

uses unidad1; // Para que pueda llamar al TWinForm de la Unidad1.

...

Begin
//Imaginemos que pulso un botón y muestro la TWinForm de la unidad1

TWinForm.Create.Show;

end;

...


Begin

//Ahora imaginemos que ya tenemos el formulario creado pero quiero poner su propiedad enable a false.


TWinForm.Enable := False; // Esta línea de un error al compilar porque dice que la propiedad enable no está definida. La cosa iría como se especifica en la siguiente línea.

TWinForm.Create.Enable := False; // Pero esta línea no pone el formulario ya creado en enable, ya que volvemos a llamar a create para que se cree otro formulario y no se actua sobre el que ya está creado.

End;
La posibilidad que he encontrado para solucionar este problema es:

Código:
Unidad2
======

...

Var
   Form1 : TWinForm;

Begin

   Form1.Create.Show;
   Form1.Enable := True; // Esta vez, esta línea sí que se puede compilar y con esto quedaría el problema que planteo solucionado.

End;

...
Pero ahora imaginemos que el form sobre el que quiero actuar es el principal, el que se crea por defecto al arrancar la aplicación y no se llama a través de ninguna variable. No he encontrado ninguna solución para poder actuar sobre la propiedad Enable del formulario principal.


Un saludo.
Responder Con Cita
  #14  
Antiguo 16-01-2006
Athanatos Athanatos is offline
Miembro
 
Registrado: ago 2005
Posts: 33
Poder: 0
Athanatos Va por buen camino
Bueno, ahora estoy trabajando con csharp... pero algo tendra en comun con delphi.net. :P

El form principal es creado con un "new", asi que no tenemos nada con que hacer referencia por separado, asi que lo defini primero como objeto:

Este codigo hay que agregarlo en el main (en delphi win32 tambien existe un .pas principal con contenido equivalente. )
Código:
        /// <summary>
        /// The main entry point for the application.
        /// </summary>

        static public TWelcomeForm WelcomeForm;
y luego antes de correr la aplicacion lo creo:
Código:
            WelcomeForm = new TWelcomeForm();
            Application.Run(WelcomeForm);
Lo mismo para todos los formularios, a la manera que lo hace delphi win32: Define los objetos, los crea todos y luego los oculta y muestra segun el caso.

Por ejemplo para mostrar otra ventana y ocultar la actual:
Código:
            Hide();
            MainProgram.MiOtroForm.Show();
Espero que esto mismo que funciona en csharp funcione en delphi.net

Última edición por Athanatos fecha: 16-01-2006 a las 22:43:25.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 14:39:27.


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