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