Como poner un label transparente sobre un picturebox en .NET

Programando, y programando me he encontrado con muchas cosas curiosas, entre ellas esta.

Imagina que quieres poner un texto encima de una imagen, lo normal sería, poner un picturebox, y luego poner encima un label pero si pones un label sobre un picturebox o cualquier otra imagen o control, pasan cosas como esta:

Fallo marcado en rojo

Fallo marcado en rojo

Como veis en la captura de arriba (programa que me he hecho en 5 minutos), esto es un problema como la copa de un pino, ya que se ve gris. Bueno no realmente, se ve del color del Form en el cual están alojados el picturebox y el label. Y este el problema, el “parent” del label es el Form, por lo que al hacer la transparencia, que la esta haciendo, la hace con su padre y no con la imagen que tiene encima, de ahí el color gris.

¿Como lograr entonces la transparencia?, pues hay dos métodos, uno sencillo que es cambiar el “parent” del label y poner el picturebox, por lo que la transparencia la tratará de hacer con el picturebox, y otra, escribir el texto en el evento “Paint” del control picturebox que es más complejo pero infinitamente mas potente.

Os adjunto el código para que nos entendamos, con comentarios:

private void Form1_Load(object sender, EventArgs e)
        {
            // Metodo 1º
            // ---------
            // Sencillo y barato... al menos es el que uso para cosas rápidas

            // Inicialización chorra
            this.label1.Text = "Esta no funciona...";
            this.label2.Text = "Esta si funciona...";

            // No funciona
            // ¿PERO QUE COÑO?
            this.label1.BackColor = Color.Transparent;

            // Funciona
            // Me cago en tó... ¿pero porqué?
            this.label2.Parent = this.pictureBox1;
            this.label2.BackColor = Color.Transparent;

        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            // Metodo 2º
            // ---------
            // Bastante mas complicado pero con muchas mas posibilidades
            Font fuente = new Font("Verdana", 8);
            SolidBrush brocha = new SolidBrush(Color.Black);

            e.Graphics.DrawString("Este si funciona, pero es mas complejo", fuente, brocha, 30, 110);

        }

Si queréis echar un ojo al programa os lo adjunto también: transparenciasLabel.

Please follow and like us:

4 pensamientos en “Como poner un label transparente sobre un picturebox en .NET

  1. Pingback: Bitacoras.com

  2. Ha veces estas cosas insignificantes, nos hacen dar cuenta lo mucho que sabemos realmente.

    Gracias por el metodo Paint, para mi es mas limpio.

  3. Lo siento, pero no funciona… ninguno de los dos métodos.

    Por más que lo he intentado, con Color.Transparent se ve el fondo del formulario y no el del Picturebox

    Y con el segundo sistema ni se lleva a ver, porque según se crea desaparece si hay una imagen en el picturebox. Solo en el caso de que el picturebox esté vacío se puede ver el texto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *