在我的C#表单中,我有一个在下载事件中显示下载百分比的标签:
this.lblprg.Text = overallpercent.ToString("#0") + "%";
Label控件的BackColor属性设置为透明,我希望将其显示在PictureBox上。但这似乎无法正常工作,我看到的是灰色背景,在图片框顶部看起来不透明。我怎样才能解决这个问题?
Answers:
Label控件很好地支持透明度。只是设计者不允许您正确放置标签。PictureBox控件不是容器控件,因此Form成为标签的父级。这样就可以看到表单的背景。
通过向表单构造函数添加一些代码,可以很容易地进行修复。您需要更改标签的Parent属性并重新计算其Location,因为它现在是相对于图片框而不是窗体的。像这样:
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 {}
ProgresBar
标签下方。
你可以用
label1.Parent = pictureBox1;
label1.BackColor = Color.Transparent; // You can also set this in the designer, as stated by ElDoRado1239
您可以使用TextRenderer绘制文本,该文本将在没有背景的情况下进行绘制:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
TextRenderer.DrawText(e.Graphics,
overallpercent.ToString("#0") + "%",
this.Font,
new Point(10, 10),
Color.Red);
}
当totalpercent值更改时,刷新pictureBox:
pictureBox1.Refresh();
您也可以使用Graphics.DrawString,但TextRenderer.DrawText(使用GDI)比DrawString(GDI +)快
一种适用于所有事物的方法,但您需要处理位置,调整大小,移动等。使用透明形式:
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();