2010-01-07 27 views

cevap

45

Sen kullanarak aracı-pencere ve normal formlar için başlık çubuğu yüksekliğini belirleyebilir:

Rectangle screenRectangle=RectangleToScreen(this.ClientRectangle); 

int titleHeight = screenRectangle.Top - this.Top; 

nerede bu 'sizin şeklidir.

ClientRectangle, formunuzun istemci alanının sınırlarını döndürür. RectangleToScreen bunu, Form ekran konumuyla aynı koordinat sistemi olan ekran koordinatlarına dönüştürür.

+1

bu iyi bir çözüm olduğuna inanıyoruz. SystemInformation.CaptionHeight yalnızca bir üst düzey pencere için Title Bar yüksekliğini (inanıyorum) verecektir ve ToolWindows için çalışmayacaktır, bu yüzden bu biraz daha geneldir. – Nick

+1

+1 benden de, bunun daha iyi bir çözüm olduğuna inanıyorum. 'SystemInformation.CaptionHeight', ToolWindows ile çalışmıyor gibi görünüyor. –

+1

Bunun doğru olduğundan emin değilim. Aero, appcompat nedenleriyle pencere pozisyonu hakkında yalan söylüyor. Onun yağ sınırları zor bir sorundur. –

2

Formunuzun bir MDI uygulamasında bir görünüm olması durumunda ek bir kırışıklık daha var. Bu durumda RectangleToScreen (this.ClientRectangle) formun kendisiyle (beklendiği gibi) değil, Form'u barındıran MDIClient denetimini barındıran MainForm'a göre koordinatları döndürür. Sen may

Bu, TitleBarsize alacak

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

tarafından bunun hesabını:

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

Tam olarak değil. Bu size * istemci olmayan alanın * yüksekliğini verir. Pratikte, bu, istemci olmayan başka alanlar yoksa başlık çubuğunun yüksekliği ile aynı olabilir, ancak zorunlu olarak aynı değildir. Semantik olarak, o zaman, kod yanlıştır. –

İlgili konular