2010-01-07 13 views

Odpowiedz

45

Można określić wysokość Titlebar zarówno narzędzia okna oraz normalnych form za pomocą:

Rectangle screenRectangle=RectangleToScreen(this.ClientRectangle); 

int titleHeight = screenRectangle.Top - this.Top; 

Gdzie ta "jest Twój formularz.

ClientRectangle zwraca granice obszaru roboczego formularza. RectangleToScreen zamienia to na współrzędne ekranu, które jest tym samym układem współrzędnych, co położenie ekranu Form.

+1

Wierzę, że to jest lepsze rozwiązanie. SystemInformation.CaptionHeight poda tylko wysokość paska tytułu dla okna najwyższego poziomu (jak sądzę) i nie będzie działać dla ToolWindows, więc jest to trochę bardziej ogólne. – Nick

+1

+1 ode mnie, ja też uważam, że to lepsze rozwiązanie. "SystemInformation.CaptionHeight" wydaje się nie działać z ToolWindows. –

+1

Nie jestem pewien, czy to prawda. Aero polega na pozycji okna z powodów appcompat. Jego grube granice są trudnym problemem. –

2

Istnieje dodatkowa zmarszczka na wypadek, gdyby formularz był widokiem w aplikacji MDI. W takim przypadku RectangleToScreen (this.ClientRectangle) zwraca współrzędne w stosunku do samego formularza (jak można się spodziewać), ale w odniesieniu do MainForm, który hostuje kontrolę MDIClient obsługującą formularz.

Użytkownik może w celu uwzględnienia, że ​​

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

To będzie wam TitleBarsize:

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

Niezupełnie. Daje to wysokość * obszaru bez obsługi klienta *. W praktyce może to być taka sama jak wysokość paska tytułu, jeśli nie ma innych obszarów poza klientem, ale niekoniecznie jest taka sama. Semantycznie, kod jest błędny. –

Powiązane problemy