Autor
|
Tema: Ayuda abrir y cerrar forms (Leído 6,137 veces)
|
alkalo
Desconectado
Mensajes: 18
|
Buenas necesito ayuda con una cosa a ver si me haceis el favor de ayudarme se abrir un form segundario con : private void PB_BUTT(object sender, EventArgs e) { this.Hide(); Selecionar frm = new Selecionar (); frm.Visible = true; }
Pero luego a la hora de querer desde el segundo retroceder al primero no me encuentra el "Principal" y no puedo hacerlo visible. Me ayudais porfa? GRACIAS!
|
|
« Última modificación: 17 Noviembre 2017, 17:32 pm por Eleкtro »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.866
|
Hola. Por favor, publica las dudas sobre C# en el subforo de programación .NET, y debes formatear el código usando las etiquetas GeShi... Respondiendo a tu pregunta, hay varias formas. La más simple y sencilla sería abrir el Form secundario a modo de ventana de diálogo, lo que detendrá la ejecución del Form desde el que se haya abierto (en tu caso, el Form principal), y entonces cuando el Form secundario se cierre, puedes continuar con una sentencia para mostrar el Form desde el que se abrió el Form secundario... un ejemplo para que se entienda: this.Hide(); frm.ShowDialog(); this.Show();
Nota: ten presente que la función Form.ShowDialog() devuelve el resultado del diálogo, pero en este caso en concreto es innecesario evaluarlo, así que lo omití.
Otra forma sería crear un contexto de aplicación, lo que nos aportaría el beneficio de poder mantener una referencia corta para el acceso al Form principal desde cualquier parte de nuestra aplicación. Un ejemplo: Program.csusing System; using System.Windows.Forms; namespace WindowsFormsApp1 { static class Program { internal static ApplicationContext Context { get; set; } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Program .Context = new ApplicationContext (new Form1 ()); Application.Run(Context); } } }
Entonces, desde un form secundario puedes llamar al Form Principal de la siguiente manera: // ... private void Form2_FormClosed(object sender, FormClosedEventArgs e) { Program.Context.MainForm.Show(); } // ...
Y otra forma sería iterar los elementos de la colección Application.OpenForms. ...O también podrías pasarle una referencia del form principal al form secundario. Como digo, maneras hay muchas. Saludos.
|
|
« Última modificación: 17 Noviembre 2017, 17:37 pm por Eleкtro »
|
En línea
|
|
|
|
alkalo
Desconectado
Mensajes: 18
|
Opto por la sencilla, pero como puedo desde la segunda llamar a la primera sentencia? Osea desde la primera puedo decir Segunda frm = new Segunda(); Pero desde la segunda no pueda llamar a la primera. Sabes?
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.866
|
Opto por la sencilla, pero como puedo desde la segunda llamar a la primera sentencia?
No entiendo a que te refieres exactamente, ¿lo que quieres no es instanciar/mostrar el form secundario, y que cuando el form secundario se cierre, o sin que se cierre desde un botón del form secundario por ejemplo, poder mostrar el form principal?, para eso ya se te ofrecieron soluciones, si no es eso lo que quieres hacer entonces sería mejor si muestras un ejemplo en pseudocódigo de lo que quieres conseguir. saludos
|
|
« Última modificación: 17 Noviembre 2017, 17:46 pm por Eleкtro »
|
En línea
|
|
|
|
alkalo
Desconectado
Mensajes: 18
|
Haber, primero gracias por la ayuda. Tenemos la primera ventana principal que tiene un boton que hace esto:
private void Form1Button(object sender, EventArgs e) { this.Hide(); Form2 frm = new Form2(); frm.Visible = true;
}
Y despues tenemos el segundo menu que quiero que tenga un boton de ir hacia atras
Me gustaria que fuera asi: (Pero no detecta el primer form)
private void Form2Button(object sender, EventArgs e) {
this.Hide(); Form1 frm1 = new Form1(); frm1.Visible = true;
}
ME EXPLICO FATAL PERO ESPERo QUE LO ENTIENDAS.
|
|
|
En línea
|
|
|
|
alkalo
Desconectado
Mensajes: 18
|
Es hacer lo que has dicho, pero con la forma sencilla no puedo hacerlo no?
|
|
|
En línea
|
|
|
|
alkalo
Desconectado
Mensajes: 18
|
entonces cuando el Form secundario se cierre, puedes continuar con una sentencia para "mostrar el Form desde el que se abrió el Form secundario" Esto no se como puedo hacerlo
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.866
|
Por favor, LEE y respeta las normas del foro y las normas del subforo d eprogramación general. Está prohibido hacer doble post, y por segunda vez: debes formatear el código que pubiques. Lo siento por ser "duro", pero sino esto se convierte en un caos. Formatea el código, no cuesta nada.
En tu escenario, creo que entonces la solución que más te convendría sería hacer esto: Y otra forma sería iterar los elementos de la colección Application.OpenForms. Ejemplo usando LINQ: Form f = (from item in Application.OpenForms.Cast<Form>() where item.Name.Equals("Form1") select item ).Single(); f.Show();
Pero lo que intentas hacer en realidad por lo que comentas, parece que quieres hacer una especie de Wizard, y en ese caso no lo estás haciendo de forma correcta, ya que lo que deberías hacer es definir una clase que controle la navegación por los Forms, en lugar de hardcorear sentencias de navegación directamente en cada clase de Form. Puedes hacerlo como prefieras, te va a funcionar igual, pero no es lo más correcto hacerlo así. Aquí tienes un buen template para el desarrollo de Wizards: Y aquí más info y documentación: Saludos
|
|
|
En línea
|
|
|
|
alkalo
Desconectado
Mensajes: 18
|
Otra forma sería crear un contexto de aplicación, lo que nos aportaría el beneficio de poder mantener una referencia corta para el acceso al Form principal desde cualquier parte de nuestra aplicación. Un ejemplo: Program.csusing System; using System.Windows.Forms; namespace WindowsFormsApp1 { static class Program { internal static ApplicationContext Context { get; set; } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Program .Context = new ApplicationContext (new Form1 ()); Application.Run(Context); } } }
Entonces, desde un form secundario puedes llamar al Form Principal de la siguiente manera: // ... private void Form2_FormClosed(object sender, FormClosedEventArgs e) { Program.Context.MainForm.Show(); } // ...
Perdona Mod puedes explicarme un poco mejor esto? Para entenderlo.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.866
|
Perdona Mod puedes explicarme un poco mejor esto? Para entenderlo. ¿Qué es lo que no entiendes exactamente de todo ese código?. El método " Main" es el punto de entrada o entry-point de la aplicación, el método que se utiliza para mostrar el Form principal que se hará visible. Bien, con la clase ApplicationContext creamos una nueva información contextual de la aplicación (para redefinirla, en este caso), al constructor de dicha clase le pasamos como argumento el Form principal de la aplicación. Y con el método Application.Run() especificamos el contexto en el que se ejecutará la aplicación (el contexto que hemos creado con la clase ApplicationContext) en el método " Main". Ten en cuenta que no es necesario hacer esto, solo si quieres usar un contexto para mantener una referencia corta del Form principal, pero te propuse varias otras soluciones a elegir, céntrate en la última que te dije, te será más facil. Saludos
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Cerrar y Abrir Aplicacion
Programación Visual Basic
|
Gionix
|
3
|
2,972
|
16 Marzo 2006, 00:41 am
por _Sergi_
|
|
|
Abrir forms
Programación Visual Basic
|
andoba
|
2
|
1,532
|
26 Marzo 2006, 03:25 am
por yofoxD
|
|
|
Abrir y cerrar bandeja.
« 1 2 »
.NET (C#, VB.NET, ASP)
|
Meta
|
16
|
13,948
|
12 Agosto 2014, 09:22 am
por Meta
|
|
|
ayuda con dev c++ cerrar ventana que mando para abrir
Windows
|
zerocross
|
0
|
2,446
|
23 Junio 2016, 23:24 pm
por zerocross
|
|
|
abrir proyecto completo en aplicacion de windows forms (ayuda)
.NET (C#, VB.NET, ASP)
|
DSREY
|
2
|
5,132
|
5 Septiembre 2017, 03:57 am
por Eleкtro
|
|