2010-12-15 3 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); 
    } 
} 

이것은 시작하기에 좋은 예일뿐입니다. 죄송합니다. 더 자세히 설명 할 수는 없습니다. 당신의 PictureBox 컨트롤의 Paint 이벤트 처리기에서이 전화

이 테두리 색상을 변경하려면 :

+0

만약 당신이 꺼져 있다면 PictureBox 컨트롤의'Paint' 이벤트 핸들러에서 항상'ControlPaint.DrawBorder'를 호출 할 수 있습니다. – Lankymart

2

이것은 항상 내가 그 사용되었습니다

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

동적으로 테두리 색상을 변경하려면, 예를 들어 mouseclick 이벤트에서 그림 상자의 Tag 속성을 사용하여 색을 저장하고 picturebox의 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를 클릭 이벤트는, 다음과 같이 뭔가를 갈 것입니다 : 당신은 처음에 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. 놓습니다 picturebox 뒤에 label.
  2. label의 뒷면 색을 원하는 테두리의 색으로 변경하십시오.
  3. labelAutoSize 속성을 false으로 설정하고 label의 크기를 원하는대로 조정하십시오.

샘플 :

enter image description here

관련 문제