2012-05-01 15 views
1

私は自分のピクチャボックスにテキストを書き込もうとしていますので、その上にラベルを描画するのが最も簡単で最善の方法だと思いました。これは私がやったことです:ラベルをピクチャボックスに追加

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 }); 

私はPictureBoxなしの空白のページが表示されます。私は間違って何をしていますか?代わりに

lblPB.Parent = PB; 

+0

そうではありませんん "最良の方法ですが、最も簡単です。 「最良の」方法は、PictureBoxの 'Paint'イベントを処理し、' e.Graphics.DrawText'を使ってテキストをペイントすることです。 – Tergiver

+0

'' Label'を完全に削除すると 'PictureBox'が単独で表示されることを確認しましたか?あなたのコードが呼び出されていると確信していますか? – ean5533

+0

はい、私はラベルなしで確認して鉛を公開しました。とにかく私はペイントイベントを使用して、提案されたように、現在はテキストの色、サイズ、フォント、および場所を変更する問題に直面しています –

答えて

13

これらの回答はすべて機能しますが、よりクリーンなソリューションを選択することを検討する必要があります。

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

PB.Controls.Add(lblPB); 
+0

何もしませんでした... –

+0

あなたは何をしたいのですか? PictureBoxがフォームに表示されない場合は、投稿していないコードに問題があります。 –

1

あなたはPictureBoxにコントロールを追加する必要がありません。だから、:

PB.Controls.Add(lblPB): 

EDIT:

ノーPictureBoxesで空白のページを取得します。

フォームのバックカラーが同じであるため、ピクチャボックスが表示されませんでした。 BorderStyleとBackColorを設定してみてください。別の間違いは、ラベルの場所を設定していない可能性があります。したがって:

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

それを行うための別の方法があります:中央にテキストを描画するには

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 

編集:あなたは代わりのPictureBoxのPaintイベントを使用することができます。それは非常に単純ですが、おそらく最高のものではありません。 (私は初心者ですので、私はものが簡単です)

私はあなたの質問を正しく理解していれば、あなたはpictureBoxの上/上にラベルを貼りたいと思います。次のコード行がこれを行います。

myLabelsName.BringToFront(); 

あなたの質問はすでに回答済みですが、これは他の人に役立つかもしれません。

1

私はこれを試しました。です(無使用のPictureBox)

  1. 使用 "パネル" 最初
  2. 設定パネルの背景画像& BackgroundImageLayout(ストレッチ)を制御パネル

インサイド

  • 追加ラベルは、すべての

  • 関連する問題