Фон трекбара в TabControl
Вопрос
У меня есть элемент управления TrackBar на TabPage внутри TabControl.Фон TrackBar отображается серым цветом, а TabPage — белым.Невозможно установить прозрачность для свойства BackColor TrackBar, и я не могу переопределить рисунок, поскольку для TrackBar не существует свойства DrawMode.Какие параметры мне нужны для установки TrackBar?Почему он не поддерживает визуальные стили?
Решение
Возможно, вы захотите взглянуть на проект TransparentTrackBar в CodePlex. Р>
Другие советы
Простой
class MyTransparentTrackBar : TrackBar
{
protected override void OnCreateControl()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
if (Parent != null)
BackColor = Parent.BackColor;
base.OnCreateControl();
}
}
Я также столкнулся с этим (нужна была панель отслеживания с прозрачным фоном на вкладке, которая будет работать как с включенными, так и с отключенными визуальными стилями).И это сработало для меня.
Не вмешивался бы здесь, но ни одно из вышеупомянутых предложений не работало для меня. Что сделали трюк были следующие строки:
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);
}
Поэтому я в основном исключаю альфа-канал из цвета фона. Тем не менее, все еще нужно проверить это с Vista и Win 7.
Очевидное решение, по-видимому, состоит в том, чтобы установить BackColor TrackBar в System-ControlLightLight. Р>
(Но проблема с очевидным решением четырехлетнего вопроса состоит в том, что это, вероятно, подразумевает, что я что-то неправильно понял.)