2010-12-15 636 views

答えて

4

PictureBoxの枠のサイズと色を設定することはできません。
しかし、それを達成するために少しトリックを行うことができます。

画像をBackgroundImageプロパティに設定します。
BackgroundImageLayoutCenterに設定します。
境界線にする色にBackColorプロパティを変更します。
PictureBoxのサイズを十分に大きくして、後ろの色を表示するようにしました。これは視覚的に境界線のように機能します。

Paddingプロパティを使用して、最後の手順を実行することもできます。

希望に役立ちます。

+0

+1、簡単で効果的な方法 –

+0

このメソッドには、複雑なレイアウトで成功せずに使用しようとするドローバックがいくつかあり、最も効果的な 'PictureBox'の' OnPaint() 'メソッドをオーバーライドしています。 – Lankymart

+0

これはまた、透明な画像を使用するときに問題があります。 –

2

現在地から「DrawBorder」メソッドを使用してカスタムの境界線をペイントし、あなたの「のSystem.Windows.Formsに渡すSystem.Windows.Forms.ControlPaintクラスを使用し、System.Windows.Forms.PictureBoxから継承し、PictureBoxクラスOnPaintメソッドをオーバーライドすることで、独自のPictureBoxを作成することができます。 PaintEventArgs 'を' OnPaint 'メソッドから削除します。

このようなものです。

using System.Windows.Forms; 
using System.Drawing; 

public class CustomPictureBox : PictureBox 
{ 
    protected override void OnPaint(PaintEventArgs e) 
    { 
    base.OnPaint(e); 
    ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, Color.Red, ButtonBorderStyle.Solid); 
    } 
} 

これは、あなたが、私はより徹底することはできません申し訳ありませんが、始めるためだけの簡単な例(未テスト)です。

+0

もしあなたがオフになっているのであれば、PictureBoxコントロールの 'Paint'イベントハンドラから' ControlPaint.DrawBorder'を呼び出すことができます。 – Lankymart

2

これはいつも私がそのために使用するものとなっている:

境界線の色を変更するには、お使いのPictureBoxコントロールのPaintイベントハンドラからこれを呼び出す:

private void pictureBox1_Paint_1(object sender, PaintEventArgs e) 
    { 
     ControlPaint.DrawBorder(e.Graphics, pictureBox1.ClientRectangle, Color.Red, ButtonBorderStyle.Solid); 
    } 

動的境界線の色を変更するには、たとえばマウスイベントから、ピクチャボックスのTagプロパティを使用して色を保存し、ピクチャボックスのClickイベントを調整してそこから取得します。たとえば:

if (pictureBox1.Tag == null) { pictureBox1.Tag = Color.Red; } //Sets a default color 
    ControlPaint.DrawBorder(e.Graphics, pictureBox1.ClientRectangle, (Color)pictureBox1.Tag, ButtonBorderStyle.Solid); 

のPictureBox Clickイベントは、その後、このような何かを行くだろう:あなたが先頭にusing System.Drawing;をする必要がありますし、最後にpictureBox1.Refresh()を呼び出すことを忘れないでください

private void pictureBox1_Click(object sender, EventArgs e) 
     { 
      if ((Color)pictureBox1.Tag == Color.Red) { pictureBox1.Tag = Color.Blue; } 
      else {pictureBox1.Tag = Color.Red; } 
      pictureBox1.Refresh(); 
     } 

。楽しい!

0

私は同じ問題に直面していたので、私はここにいました。私はもっ​​と簡単な解決策を指摘しました。

  1. の後ろにlabelを置きます。
  2. labelの背面の色を希望の境界の色に変更します。
  3. labelAutoSizeプロパティをfalseに設定し、希望するとおりにlabelをサイズ変更します。

サンプル:

enter image description here

関連する問題