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