2012-02-22 330 views
55

透明控制在我的C#窗體我有一個顯示在下載事件中下載百分比標籤:在圖片框

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

Label控件的背景色屬性設置爲是透明的,我希望它顯示在一個PictureBox。但是這看起來沒有正常工作,我看到一個灰色的背景,它在圖片框頂部看起來不透明。我怎樣才能解決這個問題?

回答

134

標籤控制支持透明度良好。只是設計師不會讓你正確放置標籤。 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; 
    } 

看起來這在運行時:

enter image description here


另一種方法是解決設計時間問題。這只是一個屬性。添加到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 {} 
+0

謝謝,它完美的作品,但在PictureBox是一個自定義的進度和下載細節不會出現,直到標籤位置的進度增加,我怎樣才能使它總是可見,而不僅僅是當進度觸動呢? 這裏a![圖片](http://i.imm。io/h342.jpeg) – Derezzed 2012-02-22 03:28:15

+1

我這樣做,直到我意識到我不需要一個picturebox。 Label控件本身具有Image屬性,如果簡單場景不需要圖像格式化,則該屬性可能已足夠。 – Larry 2012-09-13 08:34:14

+1

只有在標籤之前有一個圖片框並且不是多個時,此功能纔有效... – alap 2014-03-24 16:56:42

9

可以使用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 +)更快

也請看另一個答案here和DrawText參考here

+0

謝謝!這是幫助在ProgressBar上放置文本(透明背景)的唯一解決方案。 – Prokurors 2015-07-24 12:37:57

32

你可以使用

label1.Parent = pictureBox1; 
label1.BackColor = Color.Transparent; // You can also set this in the designer, as stated by ElDoRado1239 
+1

多數民衆贊成在完美!,從未使用標籤的父母財產。做得好。 :) – Bravo 2014-07-27 18:52:56

+0

對我來說,「Color.Transparent」顯示爲未知,並且「System.Drawing.Color.Transparent」在運行後失敗... – kokbira 2015-06-03 18:03:48

+0

感謝您確認我的感覺,接受的答案是不必要的漫長。另外,你可以在設計器中設置透明的BackColor,不需要寫出來。 – ElDoRado1239 2015-08-09 03:51:49

4

爲了方便您的設計。 您可以將標籤放置在面板內。並設置面板的背景圖像是你想要的每個圖像。集標籤背景是透明的

+1

如果圖像是GIF動畫,此解決方案將不起作用。動畫不會作爲面板的背景。 – ChunLin 2016-05-07 14:08:19

-2

使用System.Drawing中加入使用Visual Studio和Windows窗體你可以申請透明度,標籤或其他元素;Form1.Designer.cs這樣,您將有從屬性面板(在外觀上的背景色)提供透明度。或者只是編輯Designer.cs中的代碼this.label1.BackColor = System.Drawing.Color.Transparent;