elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Introducción a  Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Ayuda abrir y cerrar forms
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda abrir y cerrar forms  (Leído 2,688 veces)
alkalo

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Ayuda abrir y cerrar forms
« en: 17 Noviembre 2017, 16:33 »

Buenas necesito ayuda con una cosa a ver si me haceis el favor de ayudarme :)

se abrir un form segundario con :

                  
Código
  1.        private void PB_BUTT(object sender, EventArgs e)
  2.        {
  3.           this.Hide();
  4.           Selecionar frm = new Selecionar();
  5.           frm.Visible = true;
  6.  
  7.  
  8.  
  9.        }

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 por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Ayuda abrir y cerrar forms
« Respuesta #1 en: 17 Noviembre 2017, 17:30 »

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:

Código
  1. this.Hide();
  2. Form2 frm = new Form2();
  3. frm.ShowDialog();
  4. 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.cs
Código
  1. using System;
  2. using System.Windows.Forms;
  3.  
  4. namespace WindowsFormsApp1 {
  5.  
  6.    static class Program {
  7.  
  8.        internal static ApplicationContext Context { get; set; }
  9.  
  10.        [STAThread]
  11.        static void Main() {
  12.            Application.EnableVisualStyles();
  13.            Application.SetCompatibleTextRenderingDefault(false);
  14.  
  15.            Program.Context = new ApplicationContext(new Form1());
  16.            Application.Run(Context);
  17.        }
  18.    }
  19. }

Entonces, desde un form secundario puedes llamar al Form Principal de la siguiente manera:
Código
  1. // ...
  2. private void Form2_FormClosed(object sender, FormClosedEventArgs e) {
  3.    Program.Context.MainForm.Show();
  4. }
  5. // ...



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 por Eleкtro » En línea


alkalo

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Ayuda abrir y cerrar forms
« Respuesta #2 en: 17 Noviembre 2017, 17:37 »

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 Desconectado

Mensajes: 9.709



Ver Perfil
Re: Ayuda abrir y cerrar forms
« Respuesta #3 en: 17 Noviembre 2017, 17:44 »

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 por Eleкtro » En línea


alkalo

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Ayuda abrir y cerrar forms
« Respuesta #4 en: 17 Noviembre 2017, 17:49 »

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 Desconectado

Mensajes: 18


Ver Perfil
Re: Ayuda abrir y cerrar forms
« Respuesta #5 en: 17 Noviembre 2017, 17:53 »

Es hacer lo que has dicho, pero con la forma sencilla no puedo hacerlo no?
En línea

alkalo

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Ayuda abrir y cerrar forms
« Respuesta #6 en: 17 Noviembre 2017, 17:56 »

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 Desconectado

Mensajes: 9.709



Ver Perfil
Re: Ayuda abrir y cerrar forms
« Respuesta #7 en: 17 Noviembre 2017, 19:00 »

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:
Código
  1. Form f = (from item in Application.OpenForms.Cast<Form>()
  2.          where item.Name.Equals("Form1")
  3.          select item
  4.         ).Single();
  5.  
  6. 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 Desconectado

Mensajes: 18


Ver Perfil
Re: Ayuda abrir y cerrar forms
« Respuesta #8 en: 17 Noviembre 2017, 20:51 »



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.cs
Código
  1. using System;
  2. using System.Windows.Forms;
  3.  
  4. namespace WindowsFormsApp1 {
  5.  
  6.    static class Program {
  7.  
  8.        internal static ApplicationContext Context { get; set; }
  9.  
  10.        [STAThread]
  11.        static void Main() {
  12.            Application.EnableVisualStyles();
  13.            Application.SetCompatibleTextRenderingDefault(false);
  14.  
  15.            Program.Context = new ApplicationContext(new Form1());
  16.            Application.Run(Context);
  17.        }
  18.    }
  19. }

Entonces, desde un form secundario puedes llamar al Form Principal de la siguiente manera:
Código
  1. // ...
  2. private void Form2_FormClosed(object sender, FormClosedEventArgs e) {
  3.    Program.Context.MainForm.Show();
  4. }
  5. // ...




Perdona Mod puedes explicarme un poco mejor esto? Para entenderlo.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Ayuda abrir y cerrar forms
« Respuesta #9 en: 18 Noviembre 2017, 14:39 »

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


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cerrar y Abrir Aplicacion
Programación Visual Basic
Gionix 3 1,992 Último mensaje 16 Marzo 2006, 00:41
por _Sergi_
Abrir forms
Programación Visual Basic
andoba 2 790 Último mensaje 26 Marzo 2006, 03:25
por yofoxD
Abrir y cerrar bandeja. « 1 2 »
.NET (C#, VB.NET, ASP)
Meta 16 9,610 Último mensaje 12 Agosto 2014, 09:22
por Meta
ayuda con dev c++ cerrar ventana que mando para abrir
Windows
zerocross 0 1,038 Último mensaje 23 Junio 2016, 23:24
por zerocross
abrir proyecto completo en aplicacion de windows forms (ayuda)
.NET (C#, VB.NET, ASP)
DSREY 2 2,712 Último mensaje 5 Septiembre 2017, 03:57
por Eleкtro
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines