Hallo Mike,

am Besten arbeitest Du hier mit einem Hilfsmodul – für dieses Beispiel nenne ich es 'CCTool'. In diesem Modul definierst Du eine private Eigenschaft 'CC() as MyContainerControl', die alle Instanzen des ContainerControls enthalten wird. Außerdem benötigt das Modul zwei Methoden zum Hinzufügen und Entfernen von Instanzen zur Liste.

Protected Sub Register(c as MyContainerControl)
if CC.IndexOf(c) < 0 then // Wir wollen jede Instanz nur ein Mal in der Liste
        CC.append c
    end if
End Sub

Protected Sub Unregister(c as MyContainerControl)
    dim index as Integer = CC.IndexOf(c)
if index > -1 then // Prüfen, ob sich 'c' wirklich in der Liste befindet
        CC.remove index
    end if
End Sub

Im Open-Event von MyContainerControl (im ConstainerControl selbst, NICHT in jeder Instanz in einem Fenster) rufst Du dann 'CCTool.Register(me)' auf, im Close-Event 'CCTool.Unregister(me)'. Dies fügt die Instanz von MyContainerControl automatisch zur Liste in 'CCTool' hinzu, wenn sie erstellt wird, und entfernt sie wieder, wenn die Instanz geschlossen wird.

Jetzt musst Du in 'CCTool' noch für jede Aktion, die Du auf die Instanzen von MyContainerControl ausführen willst, eine entsprechende Methode definieren. Als Beispiel stell Dir vor, MyContainerControl enthält einfach nur eine CheckBox mit dem Namen 'CheckBox1', deren Wert Du setzen willst. Die entsprechende Methode würde lauten:

Protected Sub SetCheckBoxValue(b as Boolean)
    #pragma DisableBackgroundTasks
    for each c as MyContainerControl in CC
        c.CheckBox1.value = b
    next
End Sub

Die #pragma-Zeile kann den Ablauf der Methode beschleunigen, wenn sehr viele Instanzen von MyContainerControl gleichzeitig existieren, die Liste 'CC' also sehr groß ist.

An der entsprechenden Stelle in deinem Programm rufst Du dann nur noch 'CCTool.SetCheckBoxValue(true)' auf, und alle CheckBoxen in allen existierenden Instanzen von MyContainerControl erhalten ein Häkchen.

Selbstverständlich musst Du für jeden ContainerControl-Typ, den Du definierst, ein eigenes Modul anlegen.

Gruß
Christian

--

----------------------------------------
Christian Dorn
Email: [email protected]

REALbasic 2007.3 Pro
iMac 3.06 GHz Intel Core 2 Duo, 4 GB RAM
PowerMac G5 2x2GHz, 1.5 GB RAM
----------------------------------------

Am 31.01.2009 um 10:00 schrieb Mike Ott:

Schönes Wochenende allerseits

Mich beschäftigt eine grundsätzliche Frage: Wie spricht man Instanzen z.B.
eines ContainerControlls automatisiert an?

Ich habe z.B. einen Container mit dem Namen MeinContainer. Diesen baue ich an drei verschiedenen Orten in meinem Projekt ein. Namen: MeinContainer1,
MeinContainer2, MeinContainer3.
Nun möchte ich per Code alle drei Container automatisiert ansprechen z.B. mit einer For-Next Schleife. Als Array geht das nicht, weil MeinContainer(x)
nicht möglich ist.
Aber auch mit dem Dateinamen bringe ich es so nicht fertig:

For i = 1 To 3
MeinContainer+str(i)...
Next

Ich muss es explizit aufrufen, damit es geht:

MeinContainer1.....
MeinContainer2.....
MeinContainer3.....


Gibt es da einen effizienteren Weg? Bei vielen Instanzen wird das sonst sehr
aufwändig. Bin gespannt auf einen Tipp!


Gruss
Mike





Antwort per Email an