Deine Klasse muss (denke ich) kein Control sein. Und ich möchte nicht behaupten dein Beispiel 100% verstanden zu haben. Du könntest aber so etwas machen
Public Class Form1
Public Class ControlArray(Of C As {New, Control})
Dim coll As New List(Of C)
Private host As Control
Public Sub AddNewControl(ByVal text As String)
Dim ctl As New C
coll.Add(ctl)
host.Controls.Add(ctl)
With ctl
.Text = text
End With
AddHandler ctl.Click, AddressOf MyButton_Click
End Sub
Private Sub MyButton_Click(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("Sie wählten Schaltfläche " & CType(sender, _
Button).Name)
End Sub
Default Public ReadOnly Property Item(ByVal index As Integer) As C
Get
If index >= 0 AndAlso index < coll.Count Then
Return coll(index)
End If
End Get
End Property
Public Sub New(ByVal host As Control)
Me.host = host
End Sub
End Class
Dim myButtonArray As New ControlArray(Of Button)(Me)
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
myButtonArray.AddNewControl("Button1")
myButtonArray.AddNewControl("Button2")
myButtonArray.AddNewControl("Button3")
Dim top As Integer = 10
For i = 0 To 2
With myButtonArray(i)
.Name = "cmdAction"
.Visible = True
.Top = top
top += 50
End With
Next
End Sub
End Class Es gibt eine Menge Probleme damit, und ich kann nur kurz ein paar Probleme erwähnen. Der Code in
With ctl
.Text = text
End With kann nur Werte setzen, die als Parameter übergeben werden. In Form_Load wird mehr gemacht, aber welchen Vorteil hat man davon, abgesehen davon, dass man auf den Designer völlig verzichten muss, was alles viel komplizierter macht? In der Klasse kann man auch nur Eigenschaften der Control-Klasse ansprechen, und es gibt sehr viele Controls mit eigenen Eigenschaften. Ohne zu wissen was man in der Hand hat kann man nicht dafür programmieren.
Wie das "wiederverwendbar" wird kann ich wirklich nicht nachvollziehen, die ganze Affäre ist fürchterlich kompliziert wenn du mich fragst. Um Controls wiederverwendbar zu machen nimmt man üblicherweise ein UserControl. Und verwendet Controls wie Flow- bzw TableLayoutPanel wenn es eher um Layout geht. Natürlich kannst du im Prinzip selbst ganz komplizierte Sachen programmieren, dafür braucht man zuerst ausreichende Kenntnisse.
________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist |