gpt4 book ai didi

c# - 在其他控件上方显示具有半透明背景颜色的标签?

转载 作者:行者123 更新时间:2023-11-30 14:51:27 58 4
gpt4 key购买 nike

我有一个自定义控件,它有两个动画PictureBox 控件和一个标签控件他们。

设置子索引,使标签始终位于顶部,但图片框会互换,因此在设置动画时它们每次都会显示不同的图像。

据我了解,标签需要有一个父控件,在父控件上它可以支持半透明颜色 (Argb)。由于标签有事件图片框作为其父级,因此它也将被动画化,这根本不是我想要的。

有没有办法固定 child 相对于 parent parent 的位置?

最佳答案

要有一个透明的标签控件,你可以覆盖 OnPaint方法绘制所有与label相交的控件,最后绘制label的背景和文字。

此外,在移动您的图片框时,不要忘记调用 Invalidate()透明标签的方法。

截图

enter image description here

实现示例

public class TransparentLabel : Label
{
public TransparentLabel()
{
this.transparentBackColor = Color.Blue;
this.opacity = 50;
this.BackColor = Color.Transparent;
}
protected override void OnPaint(PaintEventArgs e)
{
if (Parent != null)
{
using (var bmp = new Bitmap(Parent.Width, Parent.Height))
{
Parent.Controls.Cast<Control>()
.Where(c => Parent.Controls.GetChildIndex(c) > Parent.Controls.GetChildIndex(this))
.Where(c => c.Bounds.IntersectsWith(this.Bounds))
.OrderByDescending(c => Parent.Controls.GetChildIndex(c))
.ToList()
.ForEach(c => c.DrawToBitmap(bmp, c.Bounds));


e.Graphics.DrawImage(bmp, -Left, -Top);
using (var b = new SolidBrush(Color.FromArgb(this.Opacity, this.TransparentBackColor)))
{
e.Graphics.FillRectangle(b, this.ClientRectangle);
}
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
TextRenderer.DrawText(e.Graphics, this.Text, this.Font, this.ClientRectangle, this.ForeColor, Color.Transparent);
}
}
}

private int opacity;
public int Opacity
{
get { return opacity; }
set
{
if (value >= 0 && value <= 255)
opacity = value;
this.Invalidate();
}
}

public Color transparentBackColor;
public Color TransparentBackColor
{
get { return transparentBackColor; }
set
{
transparentBackColor = value;
this.Invalidate();
}
}

[Browsable(false)]
public override Color BackColor
{
get
{
return Color.Transparent;
}
set
{
base.BackColor = Color.Transparent;
}
}
}

关于c# - 在其他控件上方显示具有半透明背景颜色的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34335157/

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