2009-02-20 23 views
1

我们有一个窗体,它在选项卡控件的标签页中显示媒体项目,我正在实现一项功能,允许用户将标签页弹出到自己的窗体中。如何获得一个看起来像没有标签的TabControl的控件?

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

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

回答

3

感谢亨克 - 我最终与去:

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

尝试创建自己的客户用户控件

+0

OK ..我怎么做,看起来就像一个没有标签一个TabControl? – Simon 2009-02-20 10:14:18

+0

没有选项卡的TabControl,是不是只是一个面板? – Svish 2009-02-20 10:39:08

3

的问题似乎是对UseVisbleBackgroundStyle。仅AFAIK按钮和TabPages具有此属性。

下面是一个非常肮脏的黑客,只是为了让你开始:

1)从小组派生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); 
    } 
} 
0

这个答案是从另一个answer site修改。它的做法相当干净。

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

// 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"); 
相关问题