Hacer que un Label sea realmente transparente en C#

En ocasiones necesitamos que en los «label» se vea el fondo, por que es una foto, cambia de color y no queremos ir cambiando el fondo de cada label, etc.

En la opción de color de fondo del «label», en la pestaña de web, podemos elegir que el fondo sea transparente, que fácil, pongo el color en transparente y listo, ya podemos cambiar el fondo cuando queramos.

Opcion BackColor del Label

Parámetro para seleccionar el color de fondo

Color transparente Label

Poner el color del fondo en transparente

Pues no, esto funciona si lo que cambiamos es el fondo de formulario, pero si tenemos un «picturebox» o un «panel» o cualquier otra cosa que no sea el fondo del formulario, esto no funciona.

Esto se debe a que cuando añadimos un nuevo componente a nuestro formulario, este es automáticamente propiedad del formulario, y por ello el «label», toma por defecto el color de fondo de su dueño.

Esto nos da la solución, si el color de fondo es el del propietario, lo que tenemos que hacer, para que nos funcione, es decirle quien es el dueño de nuestro «label» para que este, pueda coger el fondo que nosotros deseamos.

// Asignamos el propietario del label al picturebox
label1.parent = picturebox1;

Esto, para la mayoría de los casos, funciona, pero si el «label» lo vamos a mover por el formulario en tiempo de ejecución, este método nos puede causar un error. Debido a que el «label» esta fuera de su dueño.

Para solucionarlo tenemos que controlar en cada momento por donde movemos el «label», y si esta fuera del «panel» o del «picturebox», etc. bloquearlo y que no salga.

Para este problema se puede utilizar componentes externos al C#. pero como no era mi caso, no los he probado.

Otra cosa, si lo que queremos es hacer una especie de «OSD» para un vídeo (poner un texto y que se vea el vídeo por detrás), esto tampoco funciona. Los componentes de vídeo, ya sea el media player o VLC, son una especie de derivados de un panel, por lo que si le pasamos como propietaria a nuestro «label» el componente de vídeo, este tomara el color del fondo del componente que soporta el vídeo, es decir, el color del panel.

Aun así, con todos los «peros», este método es la solución para el 90% de los casos.

Si tienes otra solución puedes compartirla en los comentarios.