Cómo puedo crear una forma transparente con controles sólidos en VB. ¿NET?

Bien, así que sé de dos maneras ligeramente diferentes para crear una forma transparente con controles sólidos en VB. NET - el problema es que ambos tienen un defecto diferente.

Me.BackColor = Nothing
TransparencyKey = BackColor

Este código me permite hacer clic en los elementos detrás de mi formulario que están en áreas que he dejado transparente. Pero cualquier barra de desplazamiento en mi forma adopta el fondo transparente por lo que se ven feos y no se puede hacer clic en porque estaría haciendo clic en el artículo detrás de mi forma.

Me.BackColor = Color.Azure
TransparencyKey = Color.Azure

Este código resuelve el problema de la barra de desplazamiento - pero ahora ya no puedo hacer clic en ningún artículo detrás de mi forma en las áreas que he dejado transparente. La forma es transparente pero se ha vuelto sólida.

Así que lo que busco es lo mejor de ambos mundos. Mis barras de desplazamiento obviamente necesitan ser sólidas como en la segunda opción, pero los elementos detrás de mi forma en áreas que he dejado transparente necesidad de ser clicable, como en la primera opción.

¿Es posible?

Gracias.

Pregunta hecha hace 3 años, 4 meses, 28 días - Por compilerhero1251


2 Respuestas:

  • Para lograr una forma transparente con controles sólidos en VB.NET y mantener la capacidad de hacer clic en los elementos detrás de la forma en áreas transparentes, puedes utilizar un enfoque combinado de ambos códigos que mencionaste. Aquí te dejo un ejemplo de cómo puedes lograrlo:

    vb
    Public Class TransparentForm
        Inherits Form
    
        Public Sub New()
            Me.BackColor = Color.Azure
            Me.TransparencyKey = Color.FromArgb(1, 1, 1) ' Selecciona otro color para TransparencyKey que no uses en tu forma
            Me.FormBorderStyle = FormBorderStyle.None
            Me.StartPosition = FormStartPosition.CenterScreen
            Me.DoubleBuffered = True
        End Sub
    
        Protected Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs)
            Dim myBrush As Brush = New SolidBrush(Color.FromArgb(1, 1, 1))
            e.Graphics.FillRectangle(myBrush, Me.ClientRectangle)
        End Sub
    
    End Class
    

    En este ejemplo, creamos una clase llamada TransparentForm que hereda de Form. Establecemos el color de fondo de la forma a Color.Azure y definimos un TransparencyKey color que no se utilizará en la forma.

    Sobrescribimos el método OnPaintBackground para pintar un rectángulo que cubra toda la forma con el color TransparencyKey, lo que permite mantener la transparencia de la forma y hacer clic en los elementos detrás de las áreas transparentes.

    Espero que este enfoque te ayude a lograr el efecto deseado. ¡Déjame saber si tienes alguna otra pregunta!

    Respondida el Dec 18, 2020 a las 22:30 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Sí, es posible crear un formulario transparente con controles sólidos en VB.NET y permitir que los elementos detrás del formulario se puedan hacer clic en las áreas transparentes. Aquí tienes cómo hacerlo:

    • Crea un nuevo proyecto de aplicación de Windows Forms en Visual Basic.
    • En el Diseñador de Windows Forms, haz clic con el botón derecho en el formulario y selecciona Propiedades.
    • En el panel de propiedades, expande la categoría Transparencia y color y establece la propiedad Color de fondo en Transparente.
    • Establece la propiedad Clave de transparencia en el mismo color que la propiedad Color de fondo. Esto hará que las áreas del formulario que coincidan con este color sean transparentes.
    • Añade un cuadro de texto al formulario.
    • Establece la propiedad BackColor del cuadro de texto en cualquier color que no sea transparente.
    • En el código detrás del formulario, añade el siguiente código:
    vb
    Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = cp.ExStyle Or &H80000 ' WS_EX_LAYERED
            Return cp
        End Get
    End Property
    
    • Ejecuta la aplicación.

    Ahora deberías tener un formulario transparente con un cuadro de texto sólido. Puedes hacer clic en los elementos detrás del formulario en las áreas transparentes y el cuadro de texto permanecerá sólido.

    Ten en cuenta que este código solo funciona en Windows XP y versiones posteriores.

    Respondida el Dec 18, 2020 a las 22:44 - por Gemini

    Votos positivos: 0 | Votos negativos: 0