|
Zur Laufzeit dynamisch über Controls.Add(...) hinzugefügte Steuerelemente (ab Visual Basic 6 möglich) können Sie auch wie jedes andere Steuerelement in einen Container verschieben, etwa in eine PictureBox oder in einen Frame:
Private WithEvents ExtraButton As CommandButton
' ...
Set ExtraButton = Controls.Add("VB.CommandButton", "Button")
With ExtraButton
Set .Container = Frame1
.Move ...
.Caption = ...
.Visible = True
End With
' ...
Private Sub ExtraButton_Click()
MsgBox "ExtraButton"
End Sub
Auch in ein UserControl können Sie auf gleiche Weise ein nachgeladenes Steuerelement verschieben. Dazu muss lediglich bei dem betreffenden UserControl zur Entwicklungszeit die Eigenschaft ControlContainer auf True gesetzt worden sein.
In ein auf dem UserControl fest und bereits zur Entwicklungszeit platziertes Container-Steuerelement, etwa einen Frame, der nicht die ganze Fläche des UserControls bedecken soll, können Sie ein nachgeladenes Steuerelement allerdings nicht so einfach verschieben.
Versehen Sie dazu das UserControl mit einer von außen zugänglichen, öffentlichen Add-Methode mit den gleichen Parametern wie beim Visual-Basic-Original (ProgId und Name). Dann können Sie in dieser Add-Methode das gewünschte Steuerelement der Controls-Collection des UserControls hinzufügen und dort auf das Container-Control im UserControl verschieben:
Public Function Add(ProgId As String, Name As String) As Object
Dim nNewControl As Control
On Error GoTo Add_Error
Set nNewControl = Controls.Add(ProgId, Name)
Set nNewControl.Container = fra
Set Add = nNewControl
Exit Function
Add_Error:
Err.Raise Err.Number, "ucTest.Add", Err.Description
End Function
Der Aufruf der Methode unterscheiden sich nur unwesentlich von dem gewohnten Aufruf. Auch die Ereignisse des so innerhalb des UserControls nachgeladenen Steuerelements können Sie außerhalb empfangen:
Private WithEvents ExtraButton2 As CommandButton
' ...
Set ExtraButton2 = ucTest.Add("VB.CommandButton", "Button2")
With ExtraButton2
.Caption = .Name
.Visible = True
End With
' ...
Private Sub ExtraButton2_Click()
MsgBox "ExtraButton2"
End Sub
|