El control dibujado a medida no representará los controles detrás de él aunque sea transparente
-
05-07-2019 - |
Pregunta
Actualmente estoy escribiendo un control de pestañas de diseño personalizado. Creé mi propio control en lugar de dibujar el TabControl por el propietario porque pensé que sería más rápido y más flexible. Mi control de pestañas se estira después del control de pestañas VS2008; es decir, cuando se selecciona una pestaña, parte de esa pestaña está frente a otras pestañas no seleccionadas.
El control de mi pestaña consiste en un Panel que contiene todos mis objetos TabButton que son las pestañas reales en sí. He configurado el TabButton para que sea transparente así:
public TabButton()
{
...
SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
UpdateStyles();
this.BackColor = Color.Transparent;
}
Sin embargo, cuando la pestaña está seleccionada y delante de otra pestaña, la parte de la pestaña no seleccionada que debe aparecer detrás de la porción de la pestaña seleccionada no se procesa. Es el color estándar de SystemColors.Control
que rellena el resto del rectángulo de recorte para el botón seleccionado.
¿Cómo puedo lograr la transparencia adecuada en mi control personalizado?
También: TabButton hereda el Control, por eso necesitaba usar SetStyle
para usar la transparencia.
-Eric Smith
Solución
Eche un vistazo a esto: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html
La última vez que estuve en .NET Windows Forms no fue evidente que necesitabas hacer algunos de estos hacks psuedo para que la transparencia funcionara. No estoy seguro de si lo cambiaron en los últimos 3 años, pero sí recuerdo haber hecho algo como esto. Intentaría explícitamente no dibujar un fondo primero.