透明控制在我的C#窗體我有一個顯示在下載事件中下載百分比標籤:在圖片框
this.lblprg.Text = overallpercent.ToString("#0") + "%";
Label控件的背景色屬性設置爲是透明的,我希望它顯示在一個PictureBox。但是這看起來沒有正常工作,我看到一個灰色的背景,它在圖片框頂部看起來不透明。我怎樣才能解決這個問題?
透明控制在我的C#窗體我有一個顯示在下載事件中下載百分比標籤:在圖片框
this.lblprg.Text = overallpercent.ToString("#0") + "%";
Label控件的背景色屬性設置爲是透明的,我希望它顯示在一個PictureBox。但是這看起來沒有正常工作,我看到一個灰色的背景,它在圖片框頂部看起來不透明。我怎樣才能解決這個問題?
標籤控制支持透明度良好。只是設計師不會讓你正確放置標籤。 PictureBox控件不是容器控件,因此Form變爲標籤的父項。所以你看到表單的背景。
這是很容易通過增加一個比特的代碼給表單構造修復。您需要更改標籤的Parent屬性並重新計算它的位置,因爲它現在是相對於圖片框而不是表單。就像這樣:
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 {}
可以使用TextRenderer繪製文本將繪製它沒有背景:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
TextRenderer.DrawText(e.Graphics,
overallpercent.ToString("#0") + "%",
this.Font,
new Point(10, 10),
Color.Red);
}
當overallpercent值的變化,刷新圖片框:
pictureBox1.Refresh();
您還可以使用Graphics.DrawString但TextRenderer.DrawText (使用GDI)比DrawString(GDI +)更快
謝謝!這是幫助在ProgressBar上放置文本(透明背景)的唯一解決方案。 – Prokurors 2015-07-24 12:37:57
你可以使用
label1.Parent = pictureBox1;
label1.BackColor = Color.Transparent; // You can also set this in the designer, as stated by ElDoRado1239
多數民衆贊成在完美!,從未使用標籤的父母財產。做得好。 :) – Bravo 2014-07-27 18:52:56
對我來說,「Color.Transparent」顯示爲未知,並且「System.Drawing.Color.Transparent」在運行後失敗... – kokbira 2015-06-03 18:03:48
感謝您確認我的感覺,接受的答案是不必要的漫長。另外,你可以在設計器中設置透明的BackColor,不需要寫出來。 – ElDoRado1239 2015-08-09 03:51:49
爲了方便您的設計。 您可以將標籤放置在面板內。並設置面板的背景圖像是你想要的每個圖像。集標籤背景是透明的
如果圖像是GIF動畫,此解決方案將不起作用。動畫不會作爲面板的背景。 – ChunLin 2016-05-07 14:08:19
使用System.Drawing中加入使用Visual Studio和Windows窗體你可以申請透明度,標籤或其他元素;到Form1.Designer.cs這樣,您將有從屬性面板(在外觀上的背景色)提供透明度。或者只是編輯Designer.cs中的代碼this.label1.BackColor = System.Drawing.Color.Transparent;
謝謝,它完美的作品,但在PictureBox是一個自定義的進度和下載細節不會出現,直到標籤位置的進度增加,我怎樣才能使它總是可見,而不僅僅是當進度觸動呢? 這裏a![圖片](http://i.imm。io/h342.jpeg) – Derezzed 2012-02-22 03:28:15
我這樣做,直到我意識到我不需要一個picturebox。 Label控件本身具有Image屬性,如果簡單場景不需要圖像格式化,則該屬性可能已足夠。 – Larry 2012-09-13 08:34:14
只有在標籤之前有一個圖片框並且不是多個時,此功能纔有效... – alap 2014-03-24 16:56:42