Трекбар Фон в TabControl - PullRequest
4 голосов
/ 17 марта 2009

У меня есть элемент управления TrackBar на TabPage внутри TabControl. Фон TrackBar отображается серым цветом, а TabPage - белым. Нет никакого способа установить свойство BackColor TrackBar на прозрачное, и я не могу переопределить чертеж, потому что нет свойства DrawMode для TrackBar. Какие варианты я должен сделать, чтобы TrackBar соответствовал? Почему он не поддерживает визуальные стили?

Ответы [ 4 ]

2 голосов
/ 17 апреля 2011

Простой

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

        base.OnCreateControl();
    }
}

Я также столкнулся с этим (необходим трекбар с прозрачным фоном на вкладке, который будет работать как с включенными, так и с отключенными визуальными стилями). И это сработало для меня.

2 голосов
/ 26 июля 2011

Не помешает здесь, но ни одно из приведенных выше предложений не сработало Что сделали трюк были следующие строки:

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.

1 голос
/ 17 марта 2009

Возможно, вы захотите взглянуть на проект TransparentTrackBar в CodePlex.

0 голосов
/ 20 февраля 2013

Очевидным решением, по-видимому, является установка BackBolor TrackBar в System-ControlLightLight.

(Но проблема с очевидным решением четырехлетнего вопроса состоит в том, что это, вероятно, подразумевает, что я что-то неправильно понял.)

...