Pregunta

Tengo un control TrackBar en un TabPage dentro de un TabControl. El fondo de TrackBar se dibuja en gris mientras que TabPage se dibuja en blanco. No hay forma de establecer la propiedad BackColor de TrackBar en transparente, y no puedo anular el dibujo porque no hay propiedad DrawMode para TrackBar. ¿Qué opciones tengo para que la TrackBar encaje? ¿Por qué no admite estilos visuales?

¿Fue útil?

Solución

Es posible que desee ver el proyecto TransparentTrackBar en CodePlex.

Otros consejos

Simple

class MyTransparentTrackBar : TrackBar
{
    protected override void OnCreateControl()
    {
        SetStyle(ControlStyles.SupportsTransparentBackColor, true);
        if (Parent != null)
            BackColor = Parent.BackColor;

        base.OnCreateControl();
    }
}

También me enfrenté a esto (necesitaba una barra de seguimiento de fondo transparente en un control de pestañas, que funcionaría con ambos estilos visuales habilitados y deshabilitados). Y esto funcionó para mí.

No interferiría aquí, pero ninguna de las sugerencias anteriores funcionó para mí. El truco fueron las siguientes líneas:

private const int WM_DWMCOMPOSITIONCHANGED = 0x031A;
private const int WM_THEMECHANGED = 0x031E;

protected override void OnVisibleChanged(EventArgs e)
{
    Color color = this.BackColor;
    trackBarQuality.BackColor = Color.FromArgb(color.R, color.G, color.B);
}

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_DWMCOMPOSITIONCHANGED || m.Msg == WM_THEMECHANGED)
        OnVisibleChanged(new EventArgs());

    base.WndProc(ref m);
}

Así que básicamente elimino el canal alfa del color de fondo. Sin embargo, todavía tengo que probar esto con Vista y Win 7.

La solución obvia parece ser configurar BackColor de TrackBar en System-ControlLightLight.

(Pero el problema con una solución obvia a la pregunta de cuatro años es que probablemente implica que he entendido mal algo).

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