2010-01-07 2 views

답변

45

당신은 사용하여 도구 창 정상적인 형태 모두 제목 표시 줄의 높이를 확인할 수 있습니다

Rectangle screenRectangle=RectangleToScreen(this.ClientRectangle); 

int titleHeight = screenRectangle.Top - this.Top; 

어디 '이'양식입니다.

ClientRectangle은 양식의 클라이언트 영역 경계를 반환합니다. RectangleToScreen은이 값을 Form 화면 위치와 동일한 좌표계 인 화면 좌표로 변환합니다.

+1

을 나는 이것이 더 나은 솔루션입니다 생각합니다. SystemInformation.CaptionHeight는 최상위 레벨 윈도우의 제목 표시 줄 높이만을 제공하며, ToolWindows에서는 작동하지 않으므로 좀 더 일반적인 것입니다. – Nick

+1

+1, 나도이게 더 나은 해결책이라고 생각해. 'SystemInformation.CaptionHeight'는 ToolWindows에서 작동하지 않는 것 같습니다. –

+1

나는 이것이 정확하다는 것을 확신하지 못한다. Aero는 appcompat 이유로 인해 창 위치에 놓여 있습니다. 그것의 뚱뚱한 국경은 까다로운 문제이다. –

2

양식이 MDI 응용 프로그램의보기 인 경우 추가적으로 주름이 있습니다. 이 경우 RectangleToScreen (this.ClientRectangle)은 폼을 호스팅하는 MDIClient 컨트롤을 호스팅하는 MainForm과 관련하여 Form 자체가 아닌 좌표 자체를 반환합니다. 당신은 할 수있다

이 당신에게 TitleBarsize 얻을 것이다

Point pnt = new Point(0, 0); 
Point corner = this.PointToScreen(pnt); // upper left in MainFrame coordinates 
Point origin = this.Parent.PointToScreen(pnt); // MDIClient upperleft in MainFrame coordinates 
int titleBarHeight = corner.Y - origin.Y - this.Location.Y; 
0

하여 해당 설명하기 위해 :

form.ClientRectangle.Height - form.Height; 
+0

정확하지 않습니다. 이것은 비 클라이언트 영역 *의 높이를 제공합니다. 실제로는 클라이언트가 아닌 다른 영역이 없으면 제목 표시 줄의 높이와 같을 수 있지만 반드시 동일하지는 않습니다. 의미 론적으로, 그렇다면 코드가 잘못되었습니다. –

관련 문제