2009-02-05 12 views
6

estoy luchando para conseguir mi forma de tener un fondo transparente en vb.net¿Cómo puedo configurar un formulario para tener un fondo transparente

Actualmente en la forma que establece Nueva

Me.SetStyle(ControlStyles.SupportsTransparentBackColor, true) 

Pero todavía el formulario aparece con el fondo gris predeterminado

¿Alguien puede ayudar?

EDITAR: Necesito los controles en el formulario para que sea visible por lo que no creo que el establecimiento de la opacidad a 0 trabajará

EDIT: He intentado la solución clave transparencia, pero no funciona. Tengo una imagen circular con un fondo negro. OnPaint Establecí la clave de transparencia en el píxel img en 0,0, esto me deja con la imagen circular (que quiero) Oculta el fondo negro, pero aún me queda el rectángulo gris predeterminado del formulario.

a continuación es el código que tengo -

Public Sub New() 

    Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True) 
    Me.BackColor = Color.Transparent 
    ' This call is required by the Windows Form Designer. 
    InitializeComponent() 

    ' Add any initialization after the InitializeComponent() call. 
    Me.Timer1.Start() 
End Sub 

Private Sub frmWoll_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint 

    Dim img As Bitmap = CType(Me.BackgroundImage, Bitmap) 

    img.MakeTransparent(img.GetPixel(2, 2)) 
    Me.TransparencyKey = img.GetPixel(2, 2) 
End Sub 
+0

He agregado el siguiente código para obtener lo que está buscando. Si necesita algo más, por favor, haga un comentario y actualizaré el mismo –

Respuesta

11

Utilice TransparencyKey para obtener una forma más fácil.

por ejemplo.

TransparencyKey = Color.Red 
Button1.BackColor = Color.Red 

Ahora ejecute el formulario y verá que el botón 1 tiene un agujero.

Por lo tanto, utilizando este método puede crear una imagen de máscara en pintura para la cual la parte debe ser transparente y aplicar esa imagen al formulario y voila el formulario ahora es transparente.

Edit: Disculpa por la respuesta tardía.

A continuación se presenta el código modificado para adaptarse a su requisito

Public Sub New() 

    Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True) 
    Me.BackColor = Color.Transparent 

    ' This call is required by the Windows Form Designer. 
    InitializeComponent() 
    ' Add any initialization after the InitializeComponent() call. 
    Dim img As Bitmap = CType(Me.BackgroundImage, Bitmap) 

    'img.MakeTransparent(img.GetPixel(2, 2)) 
    Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None 
    Me.TransparencyKey = img.GetPixel(2, 2) 
End Sub 
+0

Si bien esta puede ser una publicación anterior, el mejor resultado de google ... Un ejemplo abreviado que puede funcionar para algunas personas es simplemente este 'TransparencyKey = Me.BackColor' .. Pero asegúrese de que el color de sus formularios no esté en la imagen que usa o en cualquier otro controles en el formulario ... Aún así establezca el color de fondo de su formulario para tener un color único – Mayhem

-2
Me.Opacity = 0 

se advirtió que:

  1. Esto es para todo el formulario, en lugar de sólo el fondo. Hay soluciones para hacer que ciertas partes sean más opacas.
  2. Es solo psuedo-transparencia donde se toma una instantánea de lo que hay detrás. Es lo suficientemente inteligente como para saber cuándo se mueve el formulario, pero no cuando se mueven otros objetos transparentes en la parte superior del formulario.
+0

Esto también ocultará todos los elementos de control en el formulario. – Ahmad

1

Hay algunos métodos que puede utilizar.

  • Usar las formas TransparencyKey
  • Anulación OnPaintBackground (WM_ERASEBKGND)
  • Anulación WndProc y manejar los mensajes de pintura (WM_NCPAINT, WM_PAINT, etc)

Recomiendo anular el procedimiento de ventana para conseguir una óptima resultados.

2

Establecer la propiedad de color TransparencyKey del formulario igual que la propiedad de color de fondo del formulario

Cuestiones relacionadas