GIF顶部的Winforms标签

fruv7luv  于 2023-01-02  发布在  其他
关注(0)|答案(1)|浏览(147)

我想在winforms中的PictureBox中的一个gif上放置一个标签。问题是这个标签的背景是白色的。我想让它是透明的。
我的代码如下:

this.pictureBox = new PictureBox();
this.pictureBox.Image = Image.FromFile("my_background.gif");
this.pictureBox.Dock = DockStyle.Fill;
this.pictureBox.SizeMode = PictureBoxSizeMode.StretchImage;

this.label = new Label();
this.label.Text = "Hallo";
this.label.BackColor = Color.Transparent;
this.label.Location = new System.Drawing.Point(100, 100);
           
this.Controls.Add(this.label);
this.Controls.Add(this.pictureBox);

我的问题是,标签有一个白色的背景,即使背景设置为透明。其他有类似问题的解决方案是设置标签的父到图片框,如下所示:

this.label.parent = this.pictureBox;

但这并没有为我解决问题,还有其他方法可以实现吗?
谢谢你的回答。

4dc9hkyq

4dc9hkyq1#

谢谢你的提示。
当只把一个视图控件放在gif前面时,它工作得很好。当添加到许多控件时,它变得非常有缺陷,只有gif的一些矩形部分会更新。
我通过将gif拆分为单个图像并在窗体的OnPaint事件中显示它们来解决这个问题

this.Paint += new PaintEventHandler(this.Paint_Background);

"绘制方法"如下所示。

private void Paint_Background(object sender, PaintEventArgs e)
{
    Graphics background_graphics = e.Graphics;
    Graphics graphicsObj;
    graphicsObj = this.CreateGraphics();

    int image_num = ((int)((DateTime.Now - start_time).TotalMilliseconds) / gif_speed) % num_images;
    Image background= Image.FromFile("Filename_"+image_num+".jpg");
    background_graphics.DrawImage(background, 0, 0, ClientSize.Width, ClientSize.Height);
    background.Dispose();
}

我的所有控件都直接添加到视图中,不再添加到图像框中,因为图像框被完全删除了。
也许这也能帮助别人

相关问题