FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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; ... 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" ... Gracias. |
#2
|
|||
|
|||
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. |
#3
|
|||
|
|||
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. |
#4
|
||||
|
||||
La aplicacion que realizas que tipo es: ( mdi, sdi . ..)
__________________
Optimus Prime |
#5
|
|||
|
|||
Nuevo form independiente
No es MDI, simplemente es un nuevo form independiente de la misma aplicación.
|
#6
|
|||
|
|||
Formulario.Show;
o Formulario.ShowModal; (almenos en delphi para Win32 es así, prueba a ver...); |
#7
|
|||
|
|||
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.
|
#8
|
|||
|
|||
Y sin .Create no se puede?
|
#9
|
|||
|
|||
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.
|
#10
|
||||
|
||||
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 |
#11
|
|||
|
|||
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. |
#12
|
|||
|
|||
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.
|
#13
|
|||
|
|||
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; 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; ... Un saludo. |
#14
|
|||
|
|||
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; Código:
WelcomeForm = new TWelcomeForm(); Application.Run(WelcomeForm); Por ejemplo para mostrar otra ventana y ocultar la actual: Código:
Hide(); MainProgram.MiOtroForm.Show(); Última edición por Athanatos fecha: 16-01-2006 a las 21:43:25. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|