gpt4 book ai didi

c# - 如何制作透明的tabPage?

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:45 30 4
gpt4 key购买 nike

如何制作一个透明的tabPage?我找到了一些解决方案,比如将 Form 的 BackColorTransparencyKey 设置为类似 Color.LimeGreen 的颜色,或者使用空方法,但 TabPage 既没有 TransparencyKeyproperty 也没有 OnPaintBackground` 方法。我该怎么做?

最佳答案

TabControl 是原生的 Windows 组件,它始终将标签页绘制成不透明的,没有内置的透明度支持。解决这个问题需要一些开箱即用的思维帮助,带有透明标签页的标签控件简单地转移到只显示标签条。您所要做的就是使用面板来承载现在位于选项卡页上的控件,并使用 SelectedIndexChanged 事件使正确的控件可见。

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

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() 方法:

private void Form1_Load(object sender, EventArgs e) {
transparentTabControl1.MakeTransparent();
}

关于c# - 如何制作透明的tabPage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30063061/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com