Trackbar Background dans un TabControl
Question
J'ai un contrôle TrackBar sur une TabPage à l'intérieur d'un TabControl. L'arrière-plan de la TrackBar est dessiné en gris, tandis que la TabPage est dessinée en blanc. Il n'y a aucun moyen de définir la propriété BackColor de la TrackBar sur transparente et je ne peux pas remplacer le dessin car il n'y a pas de propriété DrawMode pour la TrackBar. Quelles sont les options disponibles pour adapter la TrackBar? Pourquoi ne prend-il pas en charge les styles visuels?
La solution
Vous pouvez également consulter le projet TransparentTrackBar sur CodePlex.
Autres conseils
Simple
class MyTransparentTrackBar : TrackBar
{
protected override void OnCreateControl()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
if (Parent != null)
BackColor = Parent.BackColor;
base.OnCreateControl();
}
}
J'y ai également fait face (j'avais besoin d'une barre de suivi d'arrière-plan transparent sur un contrôle de tabulation, qui fonctionnerait avec les styles visuels activés et désactivés). Et cela a fonctionné pour moi.
Je ne voudrais pas intervenir ici, mais aucune des suggestions ci-dessus n'a fonctionné pour moi. Qu'est-ce que l'astuce étaient les lignes suivantes:
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);
}
Donc, en gros, j’élimine le canal alpha de la couleur de fond. Reste à tester cela avec Vista et Win 7, cependant.
La solution évidente semble être de définir le BackColor de la TrackBar sur System-ControlLightLight.
(Mais le problème avec une solution évidente à une question vieille de quatre ans est que cela implique probablement que j'ai mal compris quelque chose.)