1

我们有一个表单,可以在选项卡控件的选项卡页中显示媒体项目,我正在实现一项功能,该功能允许用户将选项卡页“弹出”到他们自己的表单中。

但是,当我将媒体播放器添加到表单而不是 TabPage 时,背景会从选项卡页的渐变填充切换到父表单的普通 SystemColors.Control 背景。我需要将媒体播放器添加到与 TabControl 具有相同背景但顶部不显示选项卡的控件中。我尝试将媒体播放器添加到 TabControl 的控件集合中,但这只会引发异常。

如何获得一个看起来像没有选项卡的 TabControl 的控件?我应该继续尝试将媒体播放器添加到 TabControl,还是应该尝试编写具有自定义绘制背景的面板?如果是后者,我如何确保它适用于所有可能的主题?

4

4 回答 4

3

这些问题似乎与 UseVisbleBackgroundStyle 有关。只有 AFAIK 按钮和 TabPages 具有此属性。

以下是一个非常肮脏的hack,只是为了让你开始:

1) 从 Panel 派生一个 customControl 并添加“使用 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);
    }
}
于 2009-02-20T10:35:49.123 回答
3

感谢 Henk - 我最终选择了:

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);
    }
}
于 2009-02-20T11:27:59.590 回答
0

尝试创建您自己的客户 UserControl

于 2009-02-20T09:54:15.603 回答
0

此答案是从另一个答案站点修改的。它做得相当干净。

在包含选项卡控件的窗口的加载事件中,尝试:

// 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");
于 2013-06-21T17:33:22.070 回答