2013-01-15 7 views
5

Wenn ich in Windows Forms ein Beschriftungssteuerelement auf Y=0 innerhalb einer Groupbox positioniere, schneidet die Beschriftung den Titeltext über dem Groupbox.Wirklich nutzbarer Bereich einer Groupbox

Wie bekomme ich den nutzbaren Bereich innerhalb der Groupbox, d. H. Die sind nicht durch den Titel der Box behindert?

Einstellung control.Y = groupBox.Padding .Top funktioniert nicht. Und Groupbox.ClientRectangle berücksichtigt auch den Text nicht.

Explanation

Edit: Es gibt einen einfachen Hack, die innere Rechteck zu bekommen: Einfach eine Position Label im GroupBox, und legen Sie es Dock Eigenschaft zu füllen. Dann können Sie die relevanten Informationen (Oben/Unten/Links/Rechts) über das Bedienfeld abrufen oder einfach das Bedienfeld direkt zum Hinzufügen Ihrer untergeordneten Steuerelemente verwenden. Allerdings würde ich gerne wissen, wie man diese Koordinaten ohne solche Hacks bekommt.

+0

Es gibt keine Eigenschaft für diese, es ist immer im Designer beäugt. Sie müssen die Texthöhe selbst messen, TextRenderer.MeasureText(). –

Antwort

2

Versuchen Sie, die DisplayRectangle Eigenschaft mit:

Die DisplayRectangle Eigenschaft gibt die Client-Rechteck des Anzeigebereichs der Steuerung. Für die Basissteuerklasse entspricht dies dem Client-Rechteck. Möglicherweise möchten die erbenden Steuerelemente dies jedoch ändern, wenn sich ihr Clientbereich von ihrem Anzeigebereich unterscheidet. Das Anzeigerechteck ist das kleinste Rechteck, das ein Steuerelement umschließt und zum Festlegen von Steuerelementen verwendet wird.

Beispiel:

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

Nein funktioniert nicht. –

+1

@JohnShedletsky Möchten Sie näher auf das Problem eingehen, das Sie haben? – LarsTech

+1

Das zurückgegebene DisplayRectangle berücksichtigt nicht die unteren Grenzen der Text-Eigenschaft der GroupBox, wenn Sie die Schriftart über den Code in 20 em geändert haben. –

1

Ganz alten Thread, aber hier ist das, was ich für meine Steuerelemente verwenden:

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

HeaderWithBigText

HeaderWithSmallText

Und th So sieht es bei verschiedenen Textgrößen aus.