1. 程式人生 > 實用技巧 >C# 設定label(標籤)控制元件的背景顏色為透明

C# 設定label(標籤)控制元件的背景顏色為透明

有時候,我們需要將控制元件的背景顏色設定為透明,比如說label(標籤)控制元件。那麼,如何將控制元件的背景顏色設定為透明?是不是隻要將控制元件的BackColor屬性設為Transparent(透明)就可以了呢?答案是否定的。看似很簡單,其實不然,在實際操作過程中,很讓人抓狂,抓狂到讓你懷疑人生。

關於透明

首先要解釋一下,什麼叫做透明。在C#這裡,透明就是指透過控制元件的背景,可以看到其父控制元件(容器)表面的顏色。所謂的透明,其實就是將父控制元件表面的顏色設定為自己的背景顏色。

設定控制元件背景顏色為透明的步驟和注意事項:

以pictureBox上的label控制元件為例,設定label的背景為透明,可以看到pictureBoxs上的圖片。

(1)首先,將label控制元件的背景顏色設為透明(Transparent)。在屬性視窗中設定,或者在程式碼中設定:label1.BackColor=Color.Transparent;
(2)其次,將label控制元件的Parent屬性設定為picturebox,也就是說,將pictureBox設為label的父控制元件。在程式碼中寫上:label1.Parent=pictureBox1;或者pictureBox1.Controls.Add(label1);
(3)最後,調整控制元件的位置。將label控制元件的位置(Location)重新設定一下,使其顯示在pictureBox中合適的位置:這一步是非常重要的!這常常是出問題的地方,如果Location屬性沒設定好,有可能看不到標籤。
注意事項:
(1)為什麼將label控制元件的背景設為透明,透過背景看到的不是pictureBox的顏色,而是窗體的顏色?
其原因是:label控制元件的父控制元件預設是窗體,當將label的背景顏色設為透明之後,看到的將會是窗體的顏色,即使你已經把label控制元件拖到pictureBox控制元件上面也無濟於事。解決方法是,重新設定label的Parent屬性,使label控制元件的父控制元件為pictureBox。
(2)為什麼將label的Parent屬性設定為pictureBox之後,執行時發現label控制元件不見了,或者顯示的位置不在拖放的位置?
原因是:
label等控制元件預設的父控制元件是窗體,一開始的時候,location屬性也是相對於窗體的。當執行時,label父控制元件改為了PictureBox,那麼location屬性也將是改為相對於PictureBox。這裡是重點,這是為什麼標籤不見的原因:加了label1.parent=pictureBox1這段程式碼之後,label的位置基準就變為PictureBox的了,但location的數值沒有變,當location的數值比PictureBox的size還大的時候,label不會顯示。因此,在設定完label1.parent=PictureBox1之後,還要設定location屬性,比如label1.location=new point(0,0)。這時label顯示在PictureBox的左上角。這是關於位置基準的問題,控制元件以誰為父親,它的位置基準就一父控制元件的左上角為基準。在切換父控制元件的時候,要注意把位置也得調一下。同樣是location=(100,100),以不同的控制元件作為父控制元件,顯示的位置是不一樣的。也就是說,顯示位置不但跟數值有關,還跟選擇的基準有關。

例子

在窗體上放一個pictureBox控制元件,並在其Image屬性中放入一張圖片,然後在pictureBox上拖放一個label控制元件。顯示效果:pictureBox上顯示圖片,上面的label控制元件的背景是透明的,透過label控制元件可以看到pictureBox上的圖片。
(1)僅僅將label的背景設為透明

private void Form1_Load(object sender, EventArgs e)
{
      label1.BackColor = Color.Transparent;
}

執行效果:

可以看到,label的背景是窗體的顏色。

(2)不僅設定背景透明,還將label的Parent屬性改為pictureBox。

private void Form1_Load(object sender, EventArgs e)
{
            label1.BackColor = Color.Transparent;
            label1.Parent = pictureBox1;
            //pictureBox1.Controls.Add(label1);
}

執行效果 :

發現,label控制元件不見了。

(3)不僅設定背景透明,將label的Parent屬性改為pictureBox,還把Location屬性重新設定為合適的值。

private void Form1_Load(object sender, EventArgs e)
{
            label1.BackColor = Color.Transparent;
            label1.Parent = pictureBox1;//將pictureBox1設為標籤的父控制元件
            //pictureBox1.Controls.Add(label1);
            label1.Location = new Point(80, 80);//重新設定標籤的位置,這個位置時相對於父控制元件的左上角
}

執行效果:

背景終於透明瞭!