我们有一个表单,可以在选项卡控件的标签页中显示媒体项目,我正在实现一项功能,允许用户将标签页“弹出”到自己的表单中。
但是,当我将媒体播放器添加到表单而不是TabPage时,背景会从标签页的渐变填充切换到父窗体的普通SystemColors.Control背景。我需要将媒体播放器添加到控件中,该控件具有与TabControl相同的背景,但不会在顶部显示选项卡。我尝试将媒体播放器添加到TabControl的控件集合中,但这只会引发异常。
如何获得一个看起来像没有标签的TabControl的控件?我应该继续尝试将媒体播放器添加到TabControl,还是应该尝试编写具有自定义绘制背景的面板?如果是后者,我如何确保它适用于所有可能的主题?
答案 0 :(得分:3)
问题似乎与UseVisbleBackgroundStyle有关。仅AFAIK按钮和TabPages具有此属性。
以下是一个非常脏的黑客,只是为了让你开始:
1)从Panel派生customControl并添加“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);
}
}
答案 1 :(得分: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);
}
}
答案 2 :(得分:0)
尝试创建自己的客户UserControl
答案 3 :(得分: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");