none
如何把label的背景色改為透明 RRS feed

  • 問題

  • 大家好,

    最近遇到一個問題

     

    我將一張圖當成背景

    在背景圖上放上label

    想要讓label的背景色為透明

    也就是可以直接看到背景圖

     

    我輸入

    label1.BackColor = Color.Transparent;
    label1.Parent = this.pictureBox1;

    但卻跑出

    "值未落在預期的範圍內"

     

    請問該如何讓label的背景色為透明??

     

    謝謝大家!!

     

    2007年10月17日 上午 03:40

解答

所有回覆

  • HI,

     

    如果您做的是網頁的話, 可以參考以下的做法:

     

    http://www.mandarindesign.com/opacitycolor.html

    tihs

    2007年10月17日 上午 04:12
  • 程式碼區塊

            private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                PictureBox pb = (PictureBox) sender;

                foreach (Control c in Controls)
                {
                    if (c is Label)
                    {
                        c.Visible = false;
                        e.Graphics.DrawString(c.Text, c.Font, new SolidBrush(c.ForeColor), c.Left - pb.Left, c.Top - pb.Top);
                    }
                }
            }

     

     

    Win Form 試試看上面的做法~控制 pictureBox1 的 paint 事件~重繪 label

     

    2007年10月17日 上午 04:57
  • 把label1.Parent = this.pictureBox1;這一行給註解掉看看.

    不太清楚你設這一行的用意.

     

    我的做法很簡單,設定Form的BackgroundImage,把隨便一張圖設為背景.

    再把要透明的Label,將它的BackColor設為Transparent.

    這樣就好了~

     

    註 : WinForm

    2007年10月17日 上午 07:36
  • tihs

    我做的不是網頁,是在手機上執行的程式

    不過還是謝謝您的資料!

     

    chhuang

    程式是在PDA手機上執行,我加了您的程式碼

    但還是沒有label變透明

    請問是不是還要加觸發事件的指令??

     

    Jeff Yeh

    若不加label1.Parent = this.pictureBox1

    Label的父控件就是Form,相對於PictureBox就不透明了

    -->這是我找到的資料

    如果把label1.Parent = this.pictureBox1註解掉

    label還是沒有透明

     

    請大家再教教我吧!!

    謝謝!!

    2007年10月17日 上午 07:49
  • 參考:

     

    (1) 討論文章 Transparent Label Wysek 的回答

     

    (2) Transparent labels by Alex Yakhnin (Device Application Developer MVP)

     

    2007年10月17日 上午 07:58
  • HI  我剛剛 試了一下  下列的方法 是可以的  不知在你的 手機 行不行的通

    給你參考看看吧  ^^

     

    程式碼區塊

      this.Controls.Remove(label1);            
      label1.Parent = this.pictureBox1;
      this.label1.BackColor = System.Drawing.Color.Transparent;
      this.label1.Location = new System.Drawing.Point(0, 0);

     

     

     

     

    2007年10月17日 上午 08:14
  • 試了您的程式碼

    但還是失敗

     

    在label1.Parent = this.pictureBox1這行

    出現"值未落在預期的範圍內"的錯誤

     

    是因為在手機上所以不能用嗎??

     

     

     

     

    2007年10月17日 下午 12:36
  •  

    不點 SIR:

     

    請問

     

    你的錯誤訊息 是在 編譯時出現  還時執行時出現?

     

    你的  那一段  程式碼  是寫在 哪個地方 ? 是在 InitializeComponent() 裡面  還是其他地方

    2007年10月18日 上午 01:48
  • 程式編譯會過

    但執行到那行就會錯誤

     

    程式碼不管是寫在

    Form1、Form1_Load、或是InitializeComponent() 裡

    都沒辦法成功執行

     

    但只要把label1.Parent = this.pictureBox1註解掉

    就可以執行成功

    可是  label的背景色仍然不是透明的

     

    上網查了資料

    好像沒有人在label1.Parent = this.pictureBox1失敗

     

    2007年10月18日 下午 12:26
  • HI     不點  SIR:

     

     

    若改成 這樣呢

     

    程式碼區塊
      this.Controls.Remove(label1);            

      this.pictureBox1.Controls.Add(label1);
      this.label1.BackColor = System.Drawing.Color.Transparent;
      this.label1.Location = new System.Drawing.Point(0, 0);

     
     
     

     

     

    2007年10月18日 下午 01:08
  • 建議你參照chhuang提供參照的那兩個做法.

     

    你所找到的資料應該是WinForm的資料,而不是Device Applicaion.

    因為你的程式是Device Application,而且你是把Label放在PictureBox上,要拿Picture當背景,似乎也只能用DrawString的方式去達成.沒辦法直接設Transparent就好.

     

    Device Application只要用lable1.Parent=this.pictureBox就會掛了~
    2007年10月19日 上午 01:02
  • 謝謝您的回答!!!

    我會研究DrawString的方法的!!!

     

    2007年10月20日 上午 03:49