2010-05-15 3 views
3

얘들 아, 이건 간단한 답으로 밝혀 질 것 같지만, 알아낼 수는 없다. 빌드하려고하는 C# Winform 응용 프로그램이 있습니다. 폼의 아래쪽에 흰색 선을 60 픽셀 위로 그려 넣으려고합니다. 이 코드를 사용하고 있습니다 :C#으로 상대 라인 그리기

private void MainForm_Paint(object sender, PaintEventArgs e) 
{ 
    e.Graphics.DrawLine(Pens.White, 10, this.Height-60, 505, this.Height-60); 
} 

간단하지만 줄은 그리지 않습니다. 일부 디버깅 후, 나는 그것이 선을 그려 내고 있다는 것을 알았지 만, 그것은 나의 형태 밖에서 그것을 그리는 것이다. 제가 -60에서 -175로 바꾼다면 제 폼의 맨 아래에서 볼 수 있습니다. 내 양식의 높이가 변할 때를 제외하고는 내 문제가 해결 될 것입니다. 결국 양식이 바닥에 가까워 질수록 결국 양식이 다시 떨어져 나옵니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 잘못된 그래픽 장치를 사용하고 있습니까? 아니면 폼의 아래쪽에서 60 픽셀을 결정하기 위해 더 복잡한 계산이 필요합니까?

답변

8

당신은 ClientSize.Height 대신 Height 사용해야합니다. Height 속성은 전체 양식 (제목 표시 줄 및 창의 다른 부분 포함)의 높이를 반환합니다. ClientSize 속성은 그릴 수있는 영역의 크기를 제공합니다.

자세한 내용은 ClientSize property at MSDN을 참조하십시오.

0

이 코드는 어디에 있습니까? 이벤트 처리기이며 MainForm의 멤버 일 필요는 없습니다. 따라서 this.Height을 참조하면 "this"가 MainForm이 아닐 수 있습니다 (적어도 포함 된 코드 조각에서는 알 수 없습니다). 일반적으로 이벤트 처리기를 연결하는 대신 MainForm에서 OnPaint를 재정의하는 것이 좋습니다. 자신의 그림을 그리기 전에 기본 클래스의 OnPaint를 호출해야합니다. 자세한 내용은

은 MSDN에서 OnPaint 참조하십시오.