Hallo!
Habe mir dynamisch mehrere Frames erzeugt. Nun möchte ich auf diese während der Laufzeit beispielsweise mit einem „Click“ Ereignis zugreifen. Das macht er jedoch leider nicht. Wie kann ich die Objekte ansprechen, das dies funktioniert?
Code:
Private Sub Form_Load()
Dim i As Integer
Dim versetzen As Integer
Dim n As Integer
versetzen = 800
'Felder erzeugen
For i = 1 To 15
Set rahmen(i) = Me.Controls.Add(„VB.Frame“, „Rahmen“ & i)
With rahmen(i)
.Visible = True
.Width = 735
.Height = 735
.Caption = „“
End With
If i
du musst für jedes Element ein Event declarieren!
Das bedeutet das du in dem Falle mit Array nicht arbeiten kannst
Alternativ kannst du ein Frame mit dem Index 0 auf die Form setzen und diese dann via Load nachladen. Dann hast du die gewuenschten Ereignisse zur Verfügung.
Alternativ kannst du es so realisieren
Option Explicit
Private WithEvents Rahmen1 as VB.Frame
Private WithEvents Rahmen2 as VB.Frame
'etc.
Private Sub Form\_Load
Set Rahmen1 = Me.Controls.Add("VB.Frame", "Rahmen1)
'Deine Eigenschaften einstellen
Set Rahmen2 = Me.Controls.Add("VB.Frame", "Rahmen1)
'etc.
End Sub
MfG Alex
du musst für jedes Element ein Event declarieren!
Das bedeutet das du in dem Falle mit Array nicht arbeiten
kannst
Falsch. Er kann auch eine Container-Klasse schreiben, die damit umgehen kann…
kurze Anleitung:
Eine Klasse schreiben, die ein Frame darstellen soll (z.B. clsFrame)
Diese muss eine Eigenschaft „Container“ haben und alle Ereignisse, die
benötigt werden, beinhalten. In jedem Ereignis wird eine Prozedur der
Container-Eigenschaft(Klasse) aufgerufen. Außerdem sind eine Index-
und (natürlich) eine myFrame-Eigenschaft nötig.
Eine Klasse schreiben, die einen solchen Container darstellt. Diese
benötigt eine Prozedur zum Hinzufügen eines Frames (das Frame wird
der myFrame-Eigenschaft einer neuen clsFrame übergeben, der Index-
Eigenschaft eine ID) sowie die benötigten Ereignisse inklusive
eines Index-Parameters. Desweiteren werden (Friend-)Prozeduren
benötigt, die die Ereignisse auslösen (z.B. "Fire>EventName
Private WithEvents myFrames As Container
Private Sub Form\_Load()
Dim TempObj As Object
Dim i As Long
Set myFrames = New Container
For i = 1 To 15 'oder wie hoch auch immer :smile:
Set TempObj = Me.Controls.Add("VB.Frame", "Rahmen" & CStr(i))
myFrames.Add TempObj
'Noch Eigenschaften setzen (Position, Visible, ...)
Next i
End Sub
Von daher dürfte es damit eigentlich keine Probleme geben
Private Sub Form_Load()
Dim TempObj As Object
Dim i As Long
Set myFrames = New Container
For i = 1 To 15 'oder wie hoch auch immer
Set TempObj = Me.Controls.Add(„VB.Frame“, „Rahmen“ &
CStr(i))
myFrames.Add TempObj
'Noch Eigenschaften setzen (Position, Visible, …)
Next i
End Sub
Von daher dürfte es damit eigentlich keine Probleme geben
Richtig. Aber nun schau einmal deinen Code an und meinen
Welche Version ist schonender und nicht so rechenintensiv?
Ist das denn schlimm?
In meiner Version funktioniert der Spaß ja auch mit Ereignissen…
Private WithEvents myFrames As Container
Private Sub Form_Load()
Dim TempObj As Object
Dim i As Long
Set myFrames = New Container
For i = 1 To 15 'oder wie hoch auch immer
Set TempObj = Me.Controls.Add(„VB.Frame“, „Rahmen“ &
CStr(i))
myFrames.Add TempObj
'Noch Eigenschaften setzen (Position, Visible, …)
Next i
End Sub
Von daher dürfte es damit eigentlich keine Probleme geben
Richtig. Aber nun schau einmal deinen Code an und meinen
Welche Version ist schonender und nicht so rechenintensiv?
Schonender in welcher Hinsicht? Für ihn ist meine Variante sicherlich weniger Schreibkram, wenn er einmal das Funktionsprinzip verstanden hat. Rechenintensiv ist meine Version sicherlich nicht. Solltest du das anders sehen, wüsste ich gern, wo du Performance-Verluste siehst…
Ist das denn schlimm?
In meiner Version funktioniert der Spaß ja auch mit
Ereignissen…
Das habe ich nie abgestritten!
Schonender in welcher Hinsicht? Für ihn ist meine Variante
sicherlich weniger Schreibkram, wenn er einmal das
Funktionsprinzip verstanden hat. Rechenintensiv ist meine
Version sicherlich nicht. Solltest du das anders sehen, wüsste
ich gern, wo du Performance-Verluste siehst…
Mit deiner Version musst du Imenz mehr schreiben! Für sein Vorhaben,
ist deine Variante zwar nicht schlecht, aber das ist wie mit Kanonen auf Spatzen schiessen! Desweiteren sollte Deine Variante auch mehr Speicher belegen etc.