Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对PictureBox的透明控制_C#_Background_Label - Fatal编程技术网

C# 对PictureBox的透明控制

C# 对PictureBox的透明控制,c#,background,label,C#,Background,Label,在我的C表单中,我有一个标签,显示下载事件中的下载百分比: this.lblprg.Text = overallpercent.ToString("#0") + "%"; Label控件的BackColor属性设置为透明,我希望它显示在PictureBox上。但这似乎不能正常工作,我看到一个灰色背景,它在图片框顶部看起来不透明。如何修复此问题?您可以使用TextRenderer绘制文本,它将在无背景的情况下绘制文本: private void pictureBox1_Paint(objec

在我的C表单中,我有一个标签,显示下载事件中的下载百分比:

  this.lblprg.Text = overallpercent.ToString("#0") + "%";

Label控件的BackColor属性设置为透明,我希望它显示在PictureBox上。但这似乎不能正常工作,我看到一个灰色背景,它在图片框顶部看起来不透明。如何修复此问题?

您可以使用TextRenderer绘制文本,它将在无背景的情况下绘制文本:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    TextRenderer.DrawText(e.Graphics, 
                          overallpercent.ToString("#0") + "%", 
                          this.Font, 
                          new Point(10, 10), 
                          Color.Red);
}
当总百分比值更改时,刷新pictureBox:

pictureBox1.Refresh();
您也可以使用Graphics.DrawString,但TextRenderer.DrawText使用GDI比DrawString GDI更快+


另请看另一个答案和DrawText参考

标签控件很好地支持透明度。只是设计师不允许你正确放置标签。PictureBox控件不是容器控件,因此窗体成为标签的父控件。因此,您可以看到表单的背景

通过向表单构造函数添加一些代码,很容易修复。您需要更改标签的父属性并重新计算其位置,因为它现在相对于图片框而不是表单。像这样:

    public Form1() {
        InitializeComponent();
        var pos = this.PointToScreen(label1.Location);
        pos = pictureBox1.PointToClient(pos);
        label1.Parent = pictureBox1;
        label1.Location = pos;
        label1.BackColor = Color.Transparent;
    }
在运行时如下所示:

另一种方法是解决设计时问题。这只是需要一个属性。添加对System.Design的引用并将类添加到项目中,粘贴以下代码:

using System.ComponentModel;
using System.Windows.Forms;
using System.Windows.Forms.Design;    // Add reference to System.Design

[Designer(typeof(ParentControlDesigner))]
class PictureContainer : PictureBox {}
你可以用

label1.Parent = pictureBox1;
label1.BackColor = Color.Transparent; // You can also set this in the designer, as stated by ElDoRado1239
为方便您的设计。
可以将标签放置在面板内。而设置面板的背景图像就是你们想要的每一幅图像。设置标签背景是透明的

使用Visual Studio和Windows窗体,您可以通过使用System.Drawing添加将透明度应用于标签或其他元素;在Form1.Designer.cs中,通过这种方式,您可以从“属性”面板的“背景色”外观中获得透明度。或者只需在Designer.cs this.label1.BackColor=System.Drawing.Color.Transparent中编辑代码

一种方法适用于所有情况,但您需要处理位置、调整大小、移动等。。正在使用透明窗体:

        Form form = new Form();
        form.FormBorderStyle = FormBorderStyle.None;
        form.BackColor = Color.Black;
        form.TransparencyKey = Color.Black;
        form.Owner = this;
        form.Controls.Add(new Label() { Text = "Hello", Left = 0, Top = 0, Font = new Font(FontFamily.GenericSerif, 20), ForeColor = Color.White });
        form.Show();

在尝试了所提供的大多数解决方案但未成功后,以下几点对我很有用:

label1.FlatStyle = FlatStyle.Standard
label1.Parent = pictureBox1

label1.BackColor = Color.Transparent    

谢谢,它工作得很好,但是picturebox是一个定制的ProgressBar,下载详细信息直到ProgressBar在标签位置增加时才会显示,我如何使它始终可见,而不仅仅是当ProgressBar接触它时?这里有一个!我这样做了,直到我意识到我不需要一个图片盒。Label控件本身有一个Image属性,如果简单的场景不需要图像格式化,这个属性可能就足够了。而且这对标签下的ProgresBar也不起作用。也许这个技巧可以用ProgressBar完成?如何?尤其是你的“…并重新计算它的位置,因为它现在是相对于图片框而不是表单…”非常有用!太好了!,从未使用标签的父属性。干得好对我来说,Color.Transparent显示为未知,System.Drawing.Color.Transparent在运行后失败…感谢您确认我的感觉,接受的答案太长了。另外,您可以在designer中设置透明背景色,也无需写出来。谢谢。设置父对象很好。将标签添加到PictureBox控件似乎也会设置父属性ex pictureBox1.Controls.Addlabel1;。必须将标签FlatStyle设置为标准,才能将标签背景颜色设置为Color.Transparent.Thank!这是唯一有助于在进度条上放置文本透明背景的解决方案。如果图像是动画gif,此解决方案将不起作用。动画将不会用作面板的背景。