65 lines
1.9 KiB
C#
65 lines
1.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
namespace WindowsFormsApp
|
|
{
|
|
public class TransparentTabControl : TabControl
|
|
{
|
|
private List<Panel> pages = new List<Panel>();
|
|
|
|
public void MakeTransparent()
|
|
{
|
|
if (TabCount == 0) throw new InvalidOperationException();
|
|
var height = GetTabRect(0).Bottom;
|
|
// Move controls to panels
|
|
for (int tab = 0; tab < TabCount; ++tab)
|
|
{
|
|
var page = new Panel
|
|
{
|
|
Left = this.Left,
|
|
Top = this.Top + height,
|
|
Width = this.Width,
|
|
Height = this.Height - height,
|
|
BackColor = Color.Transparent,
|
|
Visible = tab == this.SelectedIndex
|
|
};
|
|
for (int ix = TabPages[tab].Controls.Count - 1; ix >= 0; --ix)
|
|
{
|
|
TabPages[tab].Controls[ix].Parent = page;
|
|
}
|
|
pages.Add(page);
|
|
this.Parent.Controls.Add(page);
|
|
}
|
|
this.Height = height /* + 1 */;
|
|
}
|
|
|
|
protected override void OnSelectedIndexChanged(EventArgs e)
|
|
{
|
|
base.OnSelectedIndexChanged(e);
|
|
for (int tab = 0; tab < pages.Count; ++tab)
|
|
{
|
|
pages[tab].Visible = tab == SelectedIndex;
|
|
}
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing) foreach (var page in pages) page.Dispose();
|
|
base.Dispose(disposing);
|
|
}
|
|
protected override CreateParams CreateParams
|
|
{
|
|
get
|
|
{
|
|
var parms = base.CreateParams;
|
|
parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN
|
|
return parms;
|
|
}
|
|
}
|
|
}
|
|
}
|