我正在尝试在紧凑的框架中自定义tabcontrol但我找不到此控件的设置透明背景的解决方案。我试图覆盖“OnPaintBackground()”方法开始设置背景但不调用此函数。如何在控件创建时使用此函数进行调用?
答案 0 :(得分:1)
编辑:我读到了关于尝试设置容器背景颜色的评论,而不是单个标签,我做了一些实验和研究。
TabControl类的OnDrawItem方法似乎用于绘制选项卡“headers”(包含每个选项卡文本的控件部分,用户单击以选择选项卡),以及容器(除了选定选项卡的内容之外的所有内容,由选项卡本身在其OnPaintBackground方法中绘制)。
您可以通过覆盖其OnDrawItem
方法使TabControl的背景透明,但只需填充DrawItemEventArgs
传递的边界也会使标签标题透明,使其无法点击(点击将通过表单,在其后面的任何内容上)。
我看到它的方式,你有几个选择来尝试解决这个问题:
class TransparentisTabControl : TabControl { //Without declaring this as new, you'd probably get a warning saying this property hides a member of the base class. //The base class's BackColor property, as I'm sure you've found out, //is hidden with attributes anyway, so it doesn't really matter. public new Color BackColor {get; set;} public TransparentishTabControl(Color backColor) { if (backColor.A == 0) throw new ArgumentException("The alpha component of backColor cannot be zero, or this TransparentisTabControl's tab pages won't be selectable."); BackColor = backColor; } protected override void OnDrawItem(DrawItemEventArgs e) { base.OnDrawItem(fake); e.Graphics.Clear(BackColor); } }
此代码适用于我,但在目标平台上可能会有不同的行为。如果您需要更多帮助/澄清,请告诉我:))
您是否尝试使标签控件透明,或单个标签页?在TabControl-derrived类中重写OnPaintBackground是不够的,因为每个TabPage也会自行绘制。您需要一个派生自TabPage的自定义类,并重写OnPaintBackground。
class TransparentTabPage : TabPage
{
public TransparentTabPage()
: base("TransparentTabPage")
{
}
protected override void OnPaintBackground(PaintEventArgs e)
{
base.OnPaintBackground(e);
Form form = FindForm();
e.Graphics.CompositingMode = CompositingMode.SourceCopy;
using (SolidBrush sb = new SolidBrush(form.TransparencyKey))
e.Graphics.FillRectangle(sb, Bounds);
}
}
为此,您的表单需要将其TransparencyKey设置为某个值,并且其AllowTransparency属性的值必须为true。
答案 1 :(得分:1)
我无法在tabcontrol中找到ondrowitem来覆盖它。 Windows CE环境(smartDevice)不支持Windows窗体中的所有功能