none
Se puede crear unaVentana emergente o PopUp en vb.net? RRS feed

  • Pregunta

  • Saludos comunidad .Net,  Quisiera saber si se puede crear o simular una ventana emergente o PopUp en .net.

     Existe la posibilidad  de crearla utilizando un panel y cambiandole a este su opacidad, para simular el estilo de Oscuridad ? como se muestra en la imagen adjunta. gracias.

    sábado, 23 de abril de 2016 8:14

Respuestas

  • Hola Jose,

    para mostrar una ventana emergente no tienes más que mostrar un formulario como diálogo a través del método ShowDialog:

            Dim dialog As New Form With {
                .FormBorderStyle = FormBorderStyle.None,
                .BackColor = Color.White
                }
            Dim texto As New Label() With{ 
                .Text = "Esto es un popup",
                .Left = 20,
                .Top = 20
            }
            Dim boton As New Button With {
                .Text = "Cerrar",
                .Top = 100,
                .Left = 100
                }
            AddHandler boton.Click, sub(sender, args) 
                                        dialog.Close()
                                    End sub    
            dialog.Controls.Add(texto)
            dialog.Controls.Add(boton)
            dialog.ShowDialog()

    Hasta que no se cierre el diálogo no se puede acceder al formulario desde el que se abrió.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    sábado, 23 de abril de 2016 8:32
  • Hola Roberto:

     Hace algunos años tuve una necesidad como la que mencionas y para salir del paso tuve que aplicar trucos "baratos" como este:

     1. Agrega un nuevo formulario, establece la propiedad FormBorderStyle = none, para eliminar el borde del mismo

     2. Establece la propiedad WindowState = Maximized para que al mostrarse el formulario se muestre siempre maximizado

     3. Define el color de fondo que desees usando la propiedad BackColor

     4. Define el TransparencyKey con el mismo color que el BackColor

     5. Define el porcentaje de transparencia deseada usando la propiedad Opacity

     Una vez que tengas este formulario creado y configurado ahora sera cuestión de que utilices una lógica similar a esta:

     6. Suponiendo que el formulario anterior lo llamaste FrmBanner

    'Intancías los formularios FrmBanner y  FrmPopUp (cambia el nombre por el que estes usando)
    Dim frmBanner As New FrmBanner()
    Dim frmPopUp As New FrmPopUp()
    '
    'Mostramos el Banner antes de mostrar el PopUp, como el banner no tiene Border y de acuerdo al WindowState este se mostrara cubriendo toda la pantalla
    frmBanner.Show()
    'Mostramos el PopUp sobre el Banner
    frmPopUp.ShowDialog()
    'A esta linea llegara solo cuando el PopUp se cierre, cerrando con esto el Banner
    frmBanner.Close()

     Esa es la lógica que debes de seguir para utilizas una ventana Modal y un banner debajo, simulando la opacidad del formulario principal.

     Espero te sea de utilidad.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta Jose Alrey miércoles, 27 de abril de 2016 23:03
    miércoles, 27 de abril de 2016 18:48
  • El efecto más simple es el deshabilitar el formulario principal.

    Enabled = False
    dialog.ShowDialog()
    Enabled = True
    

    No sé si te bastará con algo así.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta Jose Alrey miércoles, 27 de abril de 2016 23:01
    sábado, 23 de abril de 2016 23:12
  • Hola.

    'Deshabilitar los controles FormPrincipal.Enabled = false ' x Asier Villanueva 'Formulario semi transparente FormPrincipal.Opacity = "0,7" ' x Asier Villanueva 'Formulario sin bordes FormPopup.borderstyle = formBorderStyle.none 'Ocultar todos los controles. Opcional. For Each item As control In me.controls item.visible = false Next 'Formulario modal FormPopup.showDialog() 'En el formclosing del formulario popup: FormPrincipal.Opacity = 1 FormPrincipal.Enabled = True

    For Each item As control In me.controls
        item.visible = true
    Next

    Si lo deseas, puedes ocultar todos los controles y cambiarle el color de fondo al formulario (form.backcolor = color) a un gris oscuro y después de cerrar el popup lo restauras.


    Saludos. Atentamente Pablo Fac. [VB.Net - Visual Studio 2015]

    • Marcado como respuesta Jose Alrey miércoles, 27 de abril de 2016 23:01
    domingo, 24 de abril de 2016 1:13

Todas las respuestas

  • Hola Jose,

    para mostrar una ventana emergente no tienes más que mostrar un formulario como diálogo a través del método ShowDialog:

            Dim dialog As New Form With {
                .FormBorderStyle = FormBorderStyle.None,
                .BackColor = Color.White
                }
            Dim texto As New Label() With{ 
                .Text = "Esto es un popup",
                .Left = 20,
                .Top = 20
            }
            Dim boton As New Button With {
                .Text = "Cerrar",
                .Top = 100,
                .Left = 100
                }
            AddHandler boton.Click, sub(sender, args) 
                                        dialog.Close()
                                    End sub    
            dialog.Controls.Add(texto)
            dialog.Controls.Add(boton)
            dialog.ShowDialog()

    Hasta que no se cierre el diálogo no se puede acceder al formulario desde el que se abrió.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    sábado, 23 de abril de 2016 8:32
  • Excelente maestro Asier Villanueva, funciona perfectamente, no se le podrà poner el fondo del form translucido? por ejemplo que sea color negro , pero bajarle la opacidad del mismo, para darle un enfocque estetico de mayor calidad?  saludos
    sábado, 23 de abril de 2016 22:17
  • El efecto más simple es el deshabilitar el formulario principal.

    Enabled = False
    dialog.ShowDialog()
    Enabled = True
    

    No sé si te bastará con algo así.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta Jose Alrey miércoles, 27 de abril de 2016 23:01
    sábado, 23 de abril de 2016 23:12
  • Hola.

    'Deshabilitar los controles FormPrincipal.Enabled = false ' x Asier Villanueva 'Formulario semi transparente FormPrincipal.Opacity = "0,7" ' x Asier Villanueva 'Formulario sin bordes FormPopup.borderstyle = formBorderStyle.none 'Ocultar todos los controles. Opcional. For Each item As control In me.controls item.visible = false Next 'Formulario modal FormPopup.showDialog() 'En el formclosing del formulario popup: FormPrincipal.Opacity = 1 FormPrincipal.Enabled = True

    For Each item As control In me.controls
        item.visible = true
    Next

    Si lo deseas, puedes ocultar todos los controles y cambiarle el color de fondo al formulario (form.backcolor = color) a un gris oscuro y después de cerrar el popup lo restauras.


    Saludos. Atentamente Pablo Fac. [VB.Net - Visual Studio 2015]

    • Marcado como respuesta Jose Alrey miércoles, 27 de abril de 2016 23:01
    domingo, 24 de abril de 2016 1:13
  • Muy interesante tema, pude generar la ventana emergente y colocar el dialogo y el texto sin problema, pero me marca algún error en función para que cierre la ventana y tampoco pude hacer mas opaca la primera form, alguien que me ayude??? Este es el código que use:

            'Esto funciona para cerrarlo pero me marca error
            AddHandler boton.Click, Sub(sender, args) 
                                        dialog.Close()
                                    End Sub

     Me.Opacity = 0.7

    miércoles, 27 de abril de 2016 18:14
  • Hola Roberto:

     Hace algunos años tuve una necesidad como la que mencionas y para salir del paso tuve que aplicar trucos "baratos" como este:

     1. Agrega un nuevo formulario, establece la propiedad FormBorderStyle = none, para eliminar el borde del mismo

     2. Establece la propiedad WindowState = Maximized para que al mostrarse el formulario se muestre siempre maximizado

     3. Define el color de fondo que desees usando la propiedad BackColor

     4. Define el TransparencyKey con el mismo color que el BackColor

     5. Define el porcentaje de transparencia deseada usando la propiedad Opacity

     Una vez que tengas este formulario creado y configurado ahora sera cuestión de que utilices una lógica similar a esta:

     6. Suponiendo que el formulario anterior lo llamaste FrmBanner

    'Intancías los formularios FrmBanner y  FrmPopUp (cambia el nombre por el que estes usando)
    Dim frmBanner As New FrmBanner()
    Dim frmPopUp As New FrmPopUp()
    '
    'Mostramos el Banner antes de mostrar el PopUp, como el banner no tiene Border y de acuerdo al WindowState este se mostrara cubriendo toda la pantalla
    frmBanner.Show()
    'Mostramos el PopUp sobre el Banner
    frmPopUp.ShowDialog()
    'A esta linea llegara solo cuando el PopUp se cierre, cerrando con esto el Banner
    frmBanner.Close()

     Esa es la lógica que debes de seguir para utilizas una ventana Modal y un banner debajo, simulando la opacidad del formulario principal.

     Espero te sea de utilidad.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta Jose Alrey miércoles, 27 de abril de 2016 23:03
    miércoles, 27 de abril de 2016 18:48
  • Gracias por tu explicación JoseLuis, ya lo logre hacer....

    SALUDOS a todos los colegas desde Juarez, Chih.

    lunes, 2 de mayo de 2016 13:59
  • Hola:

     Un gusto, que bueno que te haya servido, en su momento no encontré otra mejor solución que esa.


    Saludos desde Monterrey, Nuevo León, México!!!

    lunes, 2 de mayo de 2016 14:10
  • buenas tardes como pudiste hacer que los controles no se hagan traparentes y solo la ventana gracias

    sábado, 2 de febrero de 2019 21:53