VB6 Zugriff auf dynamisch erzeugte Objekte

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

Hallo!

Hallo,

du musst für jedes Element ein Event declarieren!
Das bedeutet das du in dem Falle mit Array nicht arbeiten kannst :frowning:
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

Moin,

du musst für jedes Element ein Event declarieren!
Das bedeutet das du in dem Falle mit Array nicht arbeiten
kannst :frowning:

Falsch. Er kann auch eine Container-Klasse schreiben, die damit umgehen kann…

kurze Anleitung:

  1. 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.
  2. 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

Moin,

Moin,

ich habe den Source nur mal fix überflogen und net getestet.

Aber alleine die Anweisung.

Public Sub Add(FrameItem As Frame)

Diese Sub erwartet einen Frame, den du ihr übergeben möchtest.
Woher soll er den nehmen, wenn er noch keine Frames hat? :confused:

MfG ALex

Moin,

Moin,

Moin :smile:

Public Sub Add(FrameItem As Frame)

Naja, die werden ja dynamisch erstellt:

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 :smile:

Moin :smile:

Servus :smile:

Naja, die werden ja dynamisch erstellt:

Das hat er in seiner Version auch!

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 :smile:

Richtig. Aber nun schau einmal deinen Code an und meinen :wink:
Welche Version ist schonender und nicht so rechenintensiv?

MfG Alex

Moin :smile:

Servus :smile:

Tach,

Naja, die werden ja dynamisch erstellt:

Das hat er in seiner Version auch!

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 :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 :smile:

Richtig. Aber nun schau einmal deinen Code an und meinen :wink:
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…

MfG, MP-P1ayer

Tach,

Nabend,

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.

MfG, MP-P1ayer

MfG Alex