如何制作透明的tabPage?我找到了将Form BackColor
和TransparencyKey
设置为Color.LimeGreen
颜色或使用空方法覆盖OnPaintBackground
的解决方案,但TabPage既没有TransparencyKey {{1} OnPaintBackground`方法。我怎么能这样做?
答案 0 :(得分:7)
TabControl是一个本机Windows组件,它总是将标签页绘制为不透明,没有内置的透明支持。解决这个问题需要一些开箱即用的思考,带有透明标签页的标签控件只是简单地转移到可见的标签条。您所要做的就是使用面板来托管现在在标签页上的控件,并使用SelectedIndexChanged事件使正确的控件可见。
最好将其粘贴在派生类中,这样您仍然可以在设计时正常使用制表符控件。在项目中添加一个新类并粘贴下面显示的代码。编译。将新控件从工具箱顶部拖放到表单上,替换现有控件。
vec1
在窗体的Load事件处理程序中调用MakeTransparent()方法:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
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);
}
}