Sfondo della trackbar in un TabControl
Domanda
Ho un controllo TrackBar su una TabPage all'interno di un TabControl. Lo sfondo del TrackBar viene disegnato in grigio mentre TabPage viene disegnato in bianco. Non è possibile impostare la proprietà BackColor di TrackBar su trasparente e non posso ignorare il disegno perché non è presente la proprietà DrawMode per TrackBar. In quali opzioni devo adattare la TrackBar? Perché non supporta gli stili di visualizzazione?
Soluzione
Potresti voler guardare il progetto TransparentTrackBar su CodePlex.
Altri suggerimenti
semplice
class MyTransparentTrackBar : TrackBar
{
protected override void OnCreateControl()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
if (Parent != null)
BackColor = Parent.BackColor;
base.OnCreateControl();
}
}
Ho anche affrontato questo aspetto (era necessaria una trackbar con sfondo trasparente su un controllo a schede, che funzionasse con entrambi gli stili di visualizzazione abilitati e disabilitati). E questo ha funzionato per me.
Non interferirebbe qui, ma nessuno dei suggerimenti di cui sopra ha funzionato per me. Che cosa ha fatto il trucco erano le seguenti righe:
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);
}
Quindi sostanzialmente elimino il canale alfa dal colore di sfondo. Devo ancora provarlo con Vista e Win 7, tuttavia.
La soluzione ovvia sembra essere quella di impostare BackColor di TrackBar su System-ControlLightLight.
(Ma il problema con una soluzione ovvia alla domanda di quattro anni è che probabilmente implica che ho frainteso qualcosa.)