Как получить элемент управления, который выглядит как TabControl без вкладок? - PullRequest
1 голос
/ 20 февраля 2009

У нас есть форма, которая отображает элементы мультимедиа на страницах вкладок элемента управления вкладками, и я реализую функцию, которая позволяет пользователям «выдвигать» страницы вкладок в свои собственные формы.

Однако, когда я добавляю мультимедийный проигрыватель в форму, а не в TabPage, фон переключается с градиентной заливки страницы вкладки на простой фон SystemColors.Control родительской формы. Мне нужно добавить медиаплеер к элементу управления, который имеет тот же фон, что и TabControl, но не отображает вкладку вверху. Я попытался добавить медиаплеер в коллекцию элементов управления TabControl, но это просто вызывает исключение.

Как получить элемент управления, который выглядит как TabControl без вкладок? Стоит ли пытаться добавить медиаплеер в TabControl или мне нужно написать панель с нарисованным на заказ фоном? Если последнее, как мне убедиться, что оно работает со всеми возможными темами?

Ответы [ 4 ]

3 голосов
/ 20 февраля 2009

Похоже, что вопросы касаются UseVisbleBackgroundStyle. Только AFAIK кнопки и TabPages имеют это свойство.

Это очень грязный хак, только для начала:

1) извлечь customControl из Panel и добавить «using System.Windows.Forms.VisualStyles;»

2) Добавить следующий код

//warning: incomplete, add error checking etc
private readonly VisualStyleElement element = VisualStyleElement.Tab.Body.Normal;
public bool UseVisbleBackgroundStyle { get; set; }

protected override void OnPaint(PaintEventArgs pe)
{
    if (UseVisbleBackgroundStyle)
    {
        var x = new VisualStyleRenderer(element);                           
        x.DrawBackground(pe.Graphics, this.ClientRectangle);
    }
    else
    {
        base.OnPaint(pe);
    }
}
3 голосов
/ 20 февраля 2009

Спасибо Хенку - я в итоге пошел с:

protected override void OnPaintBackground(PaintEventArgs e)
{
    if (TabRenderer.IsSupported && Application.RenderWithVisualStyles)
    {
        TabRenderer.DrawTabPage(pe.Graphics, this.ClientRectangle);
    }
    else
    {
        base.OnPaintBackground(pe);
        ControlPaint.DrawBorder3D(pe.Graphics, this.ClientRectangle, Border3DStyle.Raised);
    }
}
0 голосов
/ 21 июня 2013

Этот ответ изменен с другого сайта ответов . Это делает трюк довольно чисто.

В событии загрузки для окна, содержащего элемент управления вкладкой, попробуйте:

// TabControl is the name of the tab control in this window.
TabControl.Appearance = TabAppearance.FlatButtons;
TabControl.Multiline = false;
TabControl.SizeMode = TabSizeMode.Fixed;
TabControl.ItemSize = new Size(0,1);

// The tabs are now gone.  Select the panel you want to display
TabControl.SelectTab("InProgressTab");
0 голосов
/ 20 февраля 2009

Попробуйте создать свой собственный пользовательский элемент управления

...