2013-01-15 8 views
5

W Windows Forms, kiedy umieszczam kontrolkę etykiet pod numerem Y=0 wewnątrz skrzynki grupowej, etykieta przecina się z tekstem tytułowym na górze skrzynki grupowej.Uzyskaj naprawdę użyteczny obszar Groupbox

Jak mogę uzyskać obszar do wykorzystania w obrębie Groupbox, tj. Czy nie jest to utrudnione przez tekst tytułu?

Ustawienie control.Y = groupBox.Padding. Top nie działa. I Groupbox.ClientRectangle również nie bierze pod uwagę tekstu.

Explanation

Edit: Nie jest to łatwe Hack, aby ta wewnętrzny prostokąt: Wystarczy umieścić jedną Label w GroupBox i ustaw to Dock nieruchomość do wypełnienia. Następnie możesz uzyskać odpowiednie informacje (góra/dół/lewo/prawo) z panelu lub po prostu użyć panelu bezpośrednio do dodania elementów sterujących dla dzieci. Jednak nadal chciałbym wiedzieć, jak uzyskać te współrzędne bez takich hacków.

+0

Nie ma na to właściwości, zawsze ma się oko w projektancie. Będziesz musiał zmierzyć wysokość tekstu samodzielnie, TextRenderer.MeasureText(). –

Odpowiedz

2

Spróbuj użyć właściwość DisplayRectangle:

Obiekt DisplayRectangle zwraca prostokąt kliencką obszarze wyświetlania kontroli. W przypadku podstawowej klasy kontrolnej jest to równe prostokątowi klienta. Dziedziczenie kontrolek może jednak chcieć to zmienić, jeśli ich obszar klienta różni się od obszaru wyświetlania. Prostokąt wyświetlania to najmniejszy prostokąt, który otacza kontrolkę i służy do rozmieszczania elementów sterujących.

Przykład:

label1.Location = groupBox1.DisplayRectangle.Location; 
+1

Nie działa. –

+1

@JohnShedletsky Czy chcesz wyjaśnić, jaki masz problem? – LarsTech

+1

Zwrócone wyrażenie DisplayRectangle nie respektuje dolnych granic właściwości Text grupy GroupBox po zmianie czcionki na 20 em za pomocą kodu. –

1

dość stary wątek, ale tutaj jest to, co używam do moich kontroli:

label1.Location = new Point(0,(int)(groupBox1.Font.Size)*2); 

HeaderWithBigText

HeaderWithSmallText

i Th tak wygląda na różnych rozmiarach tekstu.