Ich habe das doch noch einmal ausprobiert:

Es bleibt seltsam, aber funktioniert. Die Instanz lässt sich mit dem Befehl 
'Close' beseitigen. Das Seltsame ist, dass das auch mit der 0-Instanz gemacht 
werden darf, und dass dennoch wieder neue Instanzen erzeugt werden können. 
Der Test läuft so: Ein leeres Window, ein TextField mit Namen 'TF_Text' mit 
Index 0 und 2 PushButtons ('Lösch' und 'MachNeu') und einen Zaehler, der 
mitgeführt wird. Es handelt sich definitiv nicht um einen normalen ARRAY 
(redim, ubound etc. funktionieren nicht). Der Zähler hat den Anfangswert -1.

Seltsam ist diese Methode, weil nach dem 'Close' der Null-Instanz das 'TF_Text' 
im Debugger nicht mehr vorhanden ist, der NEW Befehl aber dennoch funktioniert. 
Das 'open' verlangt aber zwingend eine 0-Instanz von TF_Text. 

Ich füge das Beispiel an, weil ich in keiner Doku eine Erklärung erhalten habe. 
Hinterher findet man den 'close'-Befehl für Controls schon, aber ein 
Zusammenhang z. B. mit 'NEW' wird nicht hergestellt.

------------

Window1.Open:

zaehler As Integer = -1

Sub Open()
dim tf as TextField
Zaehler = 0
TF_Test(0).Text = "Index = " + str(0) 

for i as Integer = 1 to 20
zaehler = zaehler + 1
tf = new TF_Test
tf.Text = "Index = " + str(i) 
tf.Left = TF_Test(i-1).Left + 10 
tf.Top = TF_Test(i-1).Top + 10
next 

End Sub

Window1 Control PushButton1:  // 'Lösch einen'

Sub Action()
if TF_Test(zaehler) <> NIL then
TF_Test(zaehler).Close
zaehler = zaehler - 1 
end if

End Sub

Window1 Control PushButton2:  // 'Mach neues'

Sub Action()
dim tf as TextField
zaehler = zaehler + 1
  tf = new TF_Test
  tf.Text = "Index = " + str(tf.Index) 
  if zaehler = 0 then
  tf.Left = 20
  tf.Top = 20 
else
  tf.Left = TF_Test(tf.Index-1).Left + 10
  tf.Top = TF_Test(tf.Index-1).Top + 10 
end if

End Sub



Am 24.08.2011 um 08:27 schrieb Karl Grob:

> Im Moment kann ich das allgemein aus Zeitgründen nicht kontrollieren. Mit 
> ImageMBS funktioniert es. (Es geht um eine mit der Maus editierbare 
> Tabulatorenleiste ähnlich wie z. B. in Indesign.
> Generell ist das Problem nicht sehr dramatisch, aber einfach irgendwie 
> unerklärlich. (Schon Matt Neuburg hat in seinem Buch diese Art der 
> Instanzbildung kritisiert.)
> Eine 'dreckige' Lösung dürfte in jedem Fall der Wechsel von 'visible' 
> true/false sein, aber damit produziert man jede Menge unnötige Instanzen, die 
> man zur Laufzeit nicht mehr los wird. Soweit ich bisher verstanden habe, muss 
> ich eben die Instanz mit dem 0-Index immer am Leben erhalten (über sie läuft 
> ja der NEW Befehl), es handelt sich eben gar nicht um echte ARRAYs (das 
> glaubt nur die IDE von RealStudio, aber nicht der Compiler). Aber ich werde 
> das nochmals überprüfen. Jedenfalls Danke.
> 
> Am 23.08.2011 um 23:56 schrieb Alex:
> 
>>>> 
>>>> Es ist (nicht nur mit ImageMBS!) offensichtlich nicht möglich, eine solche 
>>>> Instanz mit NIL zu traktieren. Eine andere Möglichkeit sehe ich aber 
>>>> nicht. Ich hätte gerne eine 'saubere' Index-Abfolge, das geht aber nur, 
>>>> wenn ich auch dazwischen herauslöschen kann.
>>> 
>>> 
>>> TabLinks(i).remove?
>> 
>> 
>> Ah entschuldige, hatte nicht gesehen, dass jemand diese Antwort schon 
>> vorgeschlagen hat (Mail in Lion zerreisst mir die Mailthreads immer, 
>> komisch).
>> 
>> Ansonsten hätte ich gesagt, neues Array erstellen und die Werte, die du 
>> behalten möchtest, übernehmen. Und wenn ubound nicht will, selber mitzählen.
>> 
> 
> 
> 


Antwort per Email an