Formulario Transparente (Opacity)

En esta oportunidad quiero mostrarles un pequeño ejemplo en visual basic .net que me gustó mucho cuando lo hice por primera vez. No es algo que usemos todos los días pero estoy seguro que les gustará y ya encontrarán donde hacerlo. Particularmente me gusta usarlo cuando muestro el cuadro “Acerca de… ” en algunas de mis aplicaciones…

Se trata de la aparición gradual de un formulario, comienza transparente hasta que se ve al 100%. Para realizarlo necesitamos utilizar un control timer y la propiedad Opacity del formulario.

En el ejemplo lo que haremos será crear dos formularios (Form1 y Form2), el Form1 con un botón y la acción de este botón es llamar al segundo formulario. El segundo formulario irá apareciendo gradualmente y hará lo mismo cuando lo cerremos. Debería verse como en la imagen siguiente:

Bueno, manos a la obra, jaja.

Primero el evento click del botón para que cargué el segundo formulario:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim vForm2 As New Form2
    vForm2.ShowDialog()
End Sub

En el segundo formulario insertaremos dos componentes Timer’s (Timer1 y Timer2). Luego copiamos el siguiente código:

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.Opacity = 0
    Timer1.Interval = 25
    Timer1.Enabled = True
End Sub

Private Sub Form2_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    Timer2.Interval = 25
    Timer2.Enabled = True
    If Me.Opacity > 0 Then
        e.Cancel = True
    End If
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    If Me.Opacity = 1 Then
        Timer1.Enabled = False
    Else
        Me.Opacity = Me.Opacity + 0.02
        Me.Refresh()
    End If
End Sub

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    If Me.Opacity = 0 Then
        Timer2.Enabled = False
        Me.Close()
    Else
        Me.Opacity = Me.Opacity - 0.02
        Me.Refresh()
    End If
End Sub

Voy a explicar en breves palabras que es lo que hace:

Los formularios windows tienen una propiedad llamada Opacity que almacena un valor que va de 0 hasta 1. Este valor indica el porcentaje de opacidad del formulario, siendo 1 el 100% opaco y 0 0% opaco, lo que sería lo mismo que decir 100% transparente. Por eso con un valor 0.5 tendriamos un formulario 50% opaco o 50% Transparente (como más te guste).

Lo que hace un control Timer es ejecutar el código del evento Tick miestras el Timer tenga la propiedad enable en True y cada un intervalo determinado por la propiedad Interval.
Entonces tenemos el Timer1 para cuando se abre el formulario (por eso lo acrivo “Timer1.Enable = True” en el evento Load y Timer2 para cuando se cierra (Activado en el evento Closing del Formulario).

Bueno, no quiero abundar en explicaciones porque el código es breve y creo que no hay mucho más que aclarar.

Si te gustó este ejemplo deja un comentario. Me gustaría saber cuales son las preferencias de mis visitantes.



20 Responses to “Formulario Transparente (Opacity)”

  1. Información Bitacoras.com…

    Valora en Bitacoras.com: En esta oportunidad quiero mostrarles un pequeño ejemplo que me gustó mucho cuando lo hice por primera vez. No es algo que usemos todos los días pero estoy seguro que les gustará y ya encontrarán donde hacerlo. Particularm…

  2. Fluireemi dice:

    Thank you!

  3. mayang dice:

    gmn negc… bingung… mulai nya dr mana dulu..
    klu buat kayak sidebar gmn?

  4. galvis dice:

    ufff esta muy buno jaja me impreciono
    gracias

  5. Jose Manuel dice:

    Esta super fino men, pero si tienes nuevos temas si puedes mandame a mi correo e lo agradeceria mucho men…

  6. marco medina dice:

    Bunas tardes, no tendras algun ejemplo para hacer un control( ya sea label, button, frame) trasparente? gracias

  7. joel dice:

    gracias man esta bueno ese codigo eso es lo que estava buscando gracias man…..

  8. sebastian dice:

    MUCHAS GRACIAS ESTA MUY BIEN ESPLICADO

  9. NazGarB dice:

    Gracias bro ac un time staba viendo esto; lo logre acr d otro modo pro no es lo q deseaba; ahora lo malo es q no logro acr q l efecto se realice cuando el form esta contenido en otro waaaaaaaaaaaa.

    Gracias

  10. JHONATHAN dice:

    esat bien ….
    pero quisiera saber como hacer q se muestren imagenes ua tras otra pero que se desvanescan o se hagan transparentes con opacity….

    ojala me ayudes grasias!!

  11. Eduardo dice:

    Estoy buscando como hacer transparente, o modificar su opacidad, de un solo control, no del formulario. alguien sabe?.

  12. EDER dice:

    Muchas gracias esta muy bueno

  13. Edwin dice:

    muy bueno se agradece sigue subiendo mas informacion por favor …..esta muy interesante

  14. Douglas Salcedo dice:

    Estupendo.

    Estuve buscando en varios sitios explicanción sencilla para manejar los componentes de Visual Estudio. algunso son muy pobres, otros no son claros y otros asumen muchas cosas y lo complican.

    Quiero felicitarte por tu Blog. Práctico, “sencillo” de explicar y muy útil.

    Gracias me has ayudado un Montón.

    Seguiré viendo tus ejemplos para terminar pronto un proyecto que tengo en mi casa.

    Douglas Salcedo
    Milagro – Ecuador

    • Eliseo dice:

      Muchas gracias por tu comentario, ese es el espíritu que impulsa este blog: no lo sabemos todo, pero cada artículo escrito trata de explicar lo mas sencillo y practico posible cada tema tratado.
      Saludos
      Eliseo

  15. david dice:

    Good Job

  16. abigail dice:

    por favor, estoy super atorada, necesito saber el codigo para recuperar el contenido de una celda en donde doy click en un datagridview en visual studio, te lo agradeceria muchisimo, espero tu respuesta,…gracias

    • Eliseo dice:

      Hola:
      tiene que escribir código en el evento click de la celda y leer el valor de datagridview1.currentCell.value

      o bien

      datagridview1.currentrow.cell(n).value donde n es el index de la columna en cuestion

      espero que te sirva

    • David dice:

      Private Sub GrdDatos_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles GrdDatos.MouseDoubleClick

      If Convert.ToInt32(GrdDatos.CurrentRow.Index) <= Convert.ToInt32(GrdDatos.Rows.Count – 2) Then
      txtOrdeninter.Text = GrdDatos.CurrentRow.Cells(0).Value.ToString()
      End If
      txtOrdeninter.Text = GrdDatos.CurrentRow.Cells(0).Value.ToString()
      txtPartinter.Text = GrdDatos.CurrentRow.Cells(1).Value.ToString()
      txtCant_ter1inter.Text = GrdDatos.CurrentRow.Cells(4).Value.ToString()
      txtcantdisp.Text = GrdDatos.CurrentRow.Cells(5).Value.ToString()
      txtCant_EnvioInter.Text = GrdDatos.CurrentRow.Cells(6).Value.ToString()
      txtLotinter.Text = GrdDatos.CurrentRow.Cells(10).Value.ToString()
      txtMedidaInter.Text = GrdDatos.CurrentRow.Cells(13).Value.ToString()

      ActDesBotones(True)
      If Convert.ToInt32(GrdDatos.CurrentRow.Cells(4).Value) = 0 Then
      btnModificarInter.Enabled = False
      End If
      txtCant_EnvioInter.Focus()
      End Sub

      ESPERO TE SIRVA

Comentar