2012-12-13 8 views
0

현재 크기를 채우기 위해 제대로 그려지는 사용자 지정 컨트롤을 만들려고합니다. 크기 조정을 위해 ClientRectangle 속성을 사용해야한다는 가정하에 있었지만 클라이언트 사각형의 오른쪽과 아래쪽이 잘리는 것처럼 보입니다.사용자 지정 컨트롤 크기 조정

Rectangle smaller = new Rectangle(5, 5, ClientRectangle.Width - 10, ClientRectangle.Height - 10); 
e.Graphics.DrawRectangle(System.Drawing.Pens.Black, smaller); 
e.Graphics.DrawRectangle(System.Drawing.Pens.Red, ClientRectangle); 

와 추첨 이벤트 핸들러를 산출 작성이 : 나는 컨트롤의 그리기 가능 영역을 얻기 위해 사용한다 무엇

ClientRecangle is clipped

?

+1

가능한 복제본 : http://stackoverflow.com/a/8377709/577417 –

+0

가능한 [FillRectangle 및 DrawRectangle의 픽셀 동작] (http://stackoverflow.com/questions/3147569/pixel-behaviour-of- fillrectangle-and-drawrectangle) –

+0

@Benjamin 가능한 복제본의 대답이 _ 정확 _ 할 것 같습니다. 아래쪽과 오른쪽에서 1이 아닌 2를 빼야합니다. –

답변

2

당신이 할 수있는 사용 중 하나

ControlPaint.DrawBorder(g, this.ClientRectangle, _ 
         Color.Red, ButtonBorderStyle.Solid); 

Graphics g = e.Graphics;.

아니면했지만 폭과 높이가 포함되어 있지만, 그리기 때문에 폭과 높이 (1에서 1을 뺀 것은 사각형 독점 마지막 픽셀 크기를 필요로 그릴 - 내부적으로는 다음 의 위치에 끝 x + w/y + h을 계산 다음 픽셀을 마지막으로 빼기 때문에 마지막 위치 인 픽셀을 얻기 위해 하나를 빼야합니다.

rectangle r = this.ClientRectangle; 
r.Width -= 1; 
r.Height -= 1; 

g.DrawRectangle(System.Drawing.Pens.Red, r); 

물론 이것의 OnPaint 이벤트 핸들러 내에서

.

+0

아래와 오른쪽에서 1이 아닌 2를 빼야 할 것 같습니다. 감사! –

관련 문제