El control dibujado a medida no representará los controles detrás de él aunque sea transparente

StackOverflow https://stackoverflow.com/questions/1605206

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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top