首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何制作透明的tabPage?

如何制作透明的tabPage?
EN

Stack Overflow用户
提问于 2015-05-05 20:52:09
回答 1查看 7.5K关注 0票数 2

如何制作透明的tabPage?我找到了解决方案,比如将表单的BackColorTransparencyKey设置为像Color.LimeGreen这样的颜色,或者用空方法覆盖OnPaintBackground,但是TabPage没有两种方法。我怎么能这么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-05 23:08:02

TabControl是一个本机Windows组件,它总是绘制不透明的选项卡页,不支持透明。解决这个问题需要一点开箱即用的想法,一个带有透明选项卡页的制表符控件只会转移到可见的制表符上。您所要做的就是使用面板来承载现在在选项卡页面上的控件,并在SelectedIndexChanged事件中使正确的控件可见。

最好把它放在派生类中,这样您仍然可以在设计时正常使用选项卡控件。向项目中添加一个新类并粘贴下面所示的代码。编译。将新控件从工具箱顶部拖放到窗体上,替换现有控件。

代码语言:javascript
复制
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);
    }
}

在表单的Load事件处理程序中调用MakeTransparent()方法:

代码语言:javascript
复制
private void Form1_Load(object sender, EventArgs e) {
    transparentTabControl1.MakeTransparent();
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30063061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档