2012-05-01 125 views
1

我想在我的圖片框上寫上一些文字,所以我認爲最簡單和最好的方法就是在它上面繪製標籤。這是我所做的:在Picturebox上添加標籤

PB = new PictureBox(); 
PB.Image = Properties.Resources.Image; 
PB.BackColor = Color.Transparent; 
PB.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; 
PB.Size = new System.Drawing.Size(120, 30); 
PB.Location = new System.Drawing.Point(100, 100); 
lblPB.Parent = PB; 
lblPB.BackColor = Color.Transparent; 
lblPB.Text = "Text"; 
Controls.AddRange(new System.Windows.Forms.Control[] { this.PB }); 

我得到空白頁沒有PictureBoxes。我究竟做錯了什麼?

+0

這不是'最好「的方式,但它是最簡單的。 '最好'的方法是處理PictureBox的Paint事件並使用e.Graphics.DrawText來繪製文本。 – Tergiver

+0

如果您完全移除了「標籤」,您是否驗證過「PictureBox」自身顯示?你確定你的代碼甚至被稱爲? – ean5533

+0

是的,我已經驗證和pb顯示沒有標籤。無論如何,我用油漆事件建議下來,現在面臨一個問題,改變文本的顏色,大小,字體和位置 –

回答

13

儘管所有這些答案都有效,但您應該考慮選擇更清潔的解決方案。您可以改爲使用圖片框的Paint事件:

PB = new PictureBox(); 
PB.Paint += new PaintEventHandler((sender, e) => 
{ 
    e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; 
    e.Graphics.DrawString("Text", Font, Brushes.Black, 0, 0); 
}); 
//... rest of your code 

編輯要繪製居中文字:

PB.Paint += new PaintEventHandler((sender, e) => 
{ 
    e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; 

    string text = "Text"; 

    SizeF textSize = e.Graphics.MeasureString(text, Font); 
    PointF locationToDraw = new PointF(); 
    locationToDraw.X = (PB.Width/2) - (textSize.Width/2); 
    locationToDraw.Y = (PB.Height/2) - (textSize.Height/2); 

    e.Graphics.DrawString(text, Font, Brushes.Black, locationToDraw); 
}); 
+0

確實,完美,正是我所需要的,謝謝你男人/女人:) –

+0

雖然,我很想知道如何使用此編輯文本的字體,大小和位置 –

+0

查看DrawString方法,字體,大小和位置都可以在那裏設置。只是要小心內存泄漏(例如,如果你創建一個字體,在某些時候處置它) – prestomanifesto

5

而不是

lblPB.Parent = PB; 

PB.Controls.Add(lblPB); 
+0

沒有做任何事情... –

+0

它做到了,但不是你想要的。如果PictureBox沒有出現在窗體上,那麼您沒有發佈的代碼有問題。 –

1

您必須添加控件到PictureBox。所以:

PB.Controls.Add(lblPB): 

編輯:

我獲得空白頁,沒有PictureBoxes。

您沒有看到圖片框,因爲它具有相同的窗體背景色。所以嘗試設置BorderStyle和BackColor。另一個錯誤是,你可能沒有設置標籤的位置。所以:

PB.BorderStyle = BorderStyle.FixedSingle; 
PB.BackColor = Color.White; 
lblPB.Location = new Point(0,0); 
0

還有另一種方式來做到這一點。這很簡單,但可能不是最好的。 (我是初學者,所以我喜歡簡單的事情)

如果我理解你的問題的權利,你想把標籤放在pictureBox的上面/上面。下面這行代碼將做到這一點。

myLabelsName.BringToFront(); 

現在,您的問題已經得到解答,但也許這可以幫助其他人。

1

我試過了。 (沒有用圖片框)

  1. 使用 「面板」 控制第一
  2. 設置面板的的BackgroundImage & BackgroundImageLayout(拉伸)
  3. 添加標籤內面板

這一切