none
Las ventanas se multiplican en W.F. RRS feed

  • Pregunta

  • Hola a todos, sé que últimamente estoy muy recurrente, pero es que estoy muy enganchado en la programación y les agradezco todo lo que me están ayudando. Mi pregunta es cómo hago para que las ventanas dejen de multiplicarse al pulsar el botón "volver" en windows form (teniendo en cuenta que tengo dos formularios creados y comunicados entre ellos por dicho botón).

    probé este código, pero en vez de volver a la ventana ya abierta se crea una nueva:

    using (CalculosFracciones ventanaFracciones = new CalculosFracciones())
                ventanaFracciones.ShowDialog();   

    luego probé este, pero lo único que hace es ocultar la ventana y seguir creando otras nuevas:

    CalculosFracciones ventanaFracciones = new CalculosFracciones();
                    ventanaFracciones.Show();
                    this.Hide();

    martes, 29 de septiembre de 2020 19:23

Respuestas

  • hola

    Si usas el "new" vas a estar creando una nueva instancia del form y luego en el Show() mostrandola

    Para usar la misma deberias buscar dentro de la instancias abiertas si ya existe, como explico aqui

    [WinForms] Verificar si el form esta abierto

    como veras se usa el

    Application.OpenForms

    para buscar si ya esta ese form presente

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 29 de septiembre de 2020 19:48
  • Hola PequeñoSaltamontes,

    Me parece que tal vez el problema sea que no estás cerrando el formulario actual. Acá te dejo un tutorial muy rápido que podrías probar. Espero que te sea de ayuda. Por favor no olvides marcar una respuesta si resolviste tu consulta (debajo de cada post hay una opción que dice “Marcar como Respuesta”). Quedo pendiente de cualquier actualización. Gracias por levantar tu consulta en los foros de msdn.

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    martes, 29 de septiembre de 2020 20:24
    Moderador

Todas las respuestas

  • Hola, para que la ventana se cree N veces como dices, lo más probable es que esté dentro de un ciclo.

    Revisaste eso? 

    Saludos.

    martes, 29 de septiembre de 2020 19:41
  • hola

    Si usas el "new" vas a estar creando una nueva instancia del form y luego en el Show() mostrandola

    Para usar la misma deberias buscar dentro de la instancias abiertas si ya existe, como explico aqui

    [WinForms] Verificar si el form esta abierto

    como veras se usa el

    Application.OpenForms

    para buscar si ya esta ese form presente

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 29 de septiembre de 2020 19:48

  • private void Volver_Click(object sender, EventArgs e) { using (Roseta ventanaMenu = new Roseta()) ventanaMenu.ShowDialog(); }

    Gracias por responder, este es un ejemplo del código que estoy usando y como ves no hay ningún while ni for, simplemente es un botón (llamado "volver") que al pulsarlo en vez de volver sobre la ventana del menú principal se crea una nueva ventana del menú principal, de tal forma que ahora en pantalla tengo dos ventana del menúprincipal.
    martes, 29 de septiembre de 2020 19:57
  • hola

    >>como ves no hay ningún while ni for, simplemente es un botón

    ok pero el loop lo haces tu manulamente cuando presionas el boton, cada vez que presionas creas una instancia del form y la muestras

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 29 de septiembre de 2020 20:12
  • Leandro tiene razón, cada vez que haces clic, se crea una nueva ventana. Deberías validad que la ventana a la cual quieres llamar exista, de ser así, le hace un Focus(). 

    Deben haber muchas formas de hacerlo, te presento como lo hago yo.

    if (Application.OpenForms["MiVentana"] is MiVentana mv)
    {
        mv.Focus();this.Close();
    }
    else
    {
        MiVentana mv2 = new MiVentana();
        mv2.Show();
    }

    Saludos.



    martes, 29 de septiembre de 2020 20:18
  • Hola PequeñoSaltamontes,

    Me parece que tal vez el problema sea que no estás cerrando el formulario actual. Acá te dejo un tutorial muy rápido que podrías probar. Espero que te sea de ayuda. Por favor no olvides marcar una respuesta si resolviste tu consulta (debajo de cada post hay una opción que dice “Marcar como Respuesta”). Quedo pendiente de cualquier actualización. Gracias por levantar tu consulta en los foros de msdn.

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    martes, 29 de septiembre de 2020 20:24
    Moderador