|
Dafür zu sorgen, dass ein Steuerelement, das auf einem
UserControl platziert ist, immer die gesamte Fläche des
UserControls ausfüllt, ist nicht weiter schwierig. Dazu führen Sie
die Größe dieses Steuerelements im Resize-Ereignis des
UserControls nach:
Private Sub UserControl_Resize()
With UserControl
MeinControl.Move 0, 0, .ScaleWidth, .ScaleHeight
End With
End Sub
Allerdings gibt es Steuerelemente, die selbst eine Änderung
ihrer Größe unterbinden. Bei diesen wird meistens die Höhe von
dem Steuerelement selbst festgelegt. Dies ist beispielsweise bei
einzeiligen TextBoxen und bei ComboBoxen der Fall. Hier sollte sich
das Steuerelement zwar in der Breite an das UserControl anpassen,
aber umgekehrt sollte das UserControl sich in der Höhe dem
Steuerelement anpassen. Auch diese Zwei-Wege-Anpassung erfolgt am
besten im Resize-Ereignis des UserControls. Dabei wird beim Aufruf
der Move-Methode des Steuerelements auf die Angabe der Höhe
verzichtet und unmittelbar danach die Höhe des UserControls an die
Höhe des Steuerelements angepasst.
Doch da eine Größenänderung des UserControls das
Resize-Ereignis erneut auslöst, bevor es abgearbeitet ist, sollten
Sie einen zweiten Durchgang verhindern. Dies erreichen Sie, indem
Sie eine statische Variable in der Ereignisprozedur verwenden (siehe
"Aller guten Dinge ist eins").
Private Sub UserControl_Resize()
Static sInProc As Boolean
If sInProc Then
Exit Sub
Else
sInProc = True
End If
With UserControl
MeinControl.Move 0, 0, .ScaleWidth
.Height = MeinControl.Height
End With
sInProc = False
End Sub
Eine Besonderheit stellt hierbei eine ListBox dar. Eine ListBox
kann zwar eine im Prinzip beliebige Höhe annehmen. Doch wenn ihre
Eigenschaft IntegralHeight auf True gesetzt ist (Voreinstellung),
wird die exakte Höhe so nachgeführt, dass nur ganze Zeilen
dargestellt werden. Hier stellt der Code im Resize-Ereignis des
UserControls eine Kombination der beiden vorangegangenen Beispiele
dar. Zum einen werden sowohl Breite als auch Höhe der ListBox dem
UserControl angepasst, jedoch erfolgt danach die Feinjustierung der
Höhe des UserControls anhand der tatsächlichen Höhe der ListBox.
Private Sub UserControl_Resize()
Static sInProc As Boolean
If sInProc Then
Exit Sub
Else
sInProc = True
End If
With UserControl
List1.Move 0, 0, .ScaleWidth, .ScaleHeight
.Height = List1.Height
End With
sInProc = False
End Sub
|