Vielleicht noch zum Verständnis.
Ein Codeblock ist verdichteter Code, repräsentiert durch einen eigenen Datentypen (ValType liefert "B"). An und für sich macht ein Codeblock erst einmal überhaupt nichts, etwa im Moment der Erzeugung oder Zuweisung:
Hier geschieht nicht viel - es wird eine Variable "bBlock" vom Datentyp "B" (Codeblock) erzeugt, die Code enthält. Mehr passiert nicht. Der Code in einem Codeblock kann sehr (beliebig) komplex sein, er darf nur keine Anweisungen enthalten, etwa "DELETE" oder auch "FOR ... NEXT". Dafür gibt es Funktionen (DbDelete) oder entsprechende Repräsentationen (aEval), schlussendlich kann ein Codeblock aber auch auf eine Funktion verweisen, in der alles mögliche passiert. Nichtsdestotrotz: Im Moment seiner "Herstellung" macht der Codeblock überhaupt nichts. Er wird lediglich einer Variablen zugewiesen, was natürlich auch die Instanzvariable eines Objekts oder ein sog. "Slot" sein kann, also die iVar einer Klasse, die mit Codeblöcken bestückt werden kann oder sollte. Mache ich aber das hier:
Eval(bBlock)
wird der Code in "bBlock" ausgeführt. Genau das geschieht auch mit den Slots, wie "Datalink", "ColorBlock", "ItemMarked" usw. in der XbpBrowse-Klasse. Ein Event wird ausgelöst oder ein bestimmter Zustand tritt ein, und der Code im Slot wird abgerufen und ausgeführt. Hierfür stehen ggf. noch Parameter zur Verfügung (siehe Doku), die der Codeblock-Code verwenden kann, beispielsweise Referenzen auf das Klassenobjekt, um mit diesem arbeiten zu können.
Wichtig und entscheidend ist also, dass der Code im Codeblock quasi "losgelöst" ist. Was im Moment der Herstellung noch richtig und relevant war, muss im Moment der Ausführung/Evaluierung nicht mehr der Fall sein, denn der Code im Block ist hiervon unabhängig. Ich kann ihn auch ganz woanders ausführen. Deshalb muss dieser Code immer für sich funktionieren, und an dieser Stelle wird es dann eben schwierig, wenn man Codeblöcke in Iterationen erzeugen will. Alle Referenzen, die innerhalb der Iteration gültig waren, sind es im Moment der Codeblock-Evaluierung sehr wahrscheinlich nicht mehr, weshalb schon ein simpler Schleifenzähler im Block nahezu zwangsweise zu Fehlverhalten führt. Man kann ihn aber beispielsweise bei der Erzeugung von Browsespalten auch im Cargo-Slot der Column platzieren, um dann im Codeblock-Code darauf zugreifen zu können. Wichtig ist, dass man sich dieser Tatsache bewusst ist: Der Code im Block wird
nicht im Moment der Herstellung ausgeführt, sondern später - und übrigens auch beliebig oft.