@asusdk: Na, Moment. Ich will weder irgendwelche Code-Gerüch(t)e verbreiten, noch, dass Du mir blindlings vertraust. Ich hab die Silberlöffel auch nicht mit Weisheit gegessen.
StringArray besteht aus 3 Einträgen. Item(0), Item(1), Item(2). ReDim Preserve setzt nun das obere Ende auf GetupperBound(0) - 1. GetupperBound(0) ist hier 2, da das oberste/letzte Item den Index 2 hat -> nach dem ReDim-Aufruf hat das Feld nur noch 2 Einträge, Item(0) und Item(1), da gecoded wurde, dass das Feld eine neue Obergrenze von 1 haben soll. Obergrenze, nicht Itemzahl.
Was passiert also bei Deinem Code
Gegenbeispiel:
Eine RTB mit folgenden Zeilen füllen:
und dann einmal die Maus über StringArray, sobald der Debugger unterbricht. Es kommt inhaltlich das gleiche raus wie die Initialdaten -> nix hat sich geändert.
Beachte bitte den Unterschied zwischen Count und GetUpperbound(0), der den Wirkungsunterschied zwischen den Beispielen erzeugt. GetUpperbound(0) gibt eine um 1 kleinere Zahl als Count wieder, eben weil die Indizes nullbasiert sind. Item(0), Item(1), Item(2) -> GetUpperbound(0) gibt den Index des letzten Elements wieder (also 2), während ein "Count" 3 wiedergibt - eben die Item-Anzahl.
StringArray besteht aus 3 Einträgen. Item(0), Item(1), Item(2). ReDim Preserve setzt nun das obere Ende auf GetupperBound(0) - 1. GetupperBound(0) ist hier 2, da das oberste/letzte Item den Index 2 hat -> nach dem ReDim-Aufruf hat das Feld nur noch 2 Einträge, Item(0) und Item(1), da gecoded wurde, dass das Feld eine neue Obergrenze von 1 haben soll. Obergrenze, nicht Itemzahl.
Was passiert also bei Deinem Code
ReDim Preserve rtbIDs.Lines(rtbIDs.Lines.Count - 1)
? Gehen wir davon aus, dass in der RTB 5 Zeilen sind. Damit haben die Zeilen die Indizes von 0-4. rtbIDs.Lines.Count - 1 = 5 - 1 = 4. Also wird mit der ReDim-Anweisung festgelegt, dass das String-Feld so geändert wird, dass das letzte Item den Index 4 hat. Hat es aber schon! Also passiert gar nix. Der Code ist (trotz meiner Befürchtung, weil ich nicht richtig geschaut hab) wirkungslos.Gegenbeispiel:
Eine RTB mit folgenden Zeilen füllen:
- 1
- (Leerzeile)
- 2
- 3
- [Leerzeichen] und Enter drücken, damit die nächste Zeile noch entsteht
- (Leerzeile lassen, nicht Enter drücken, sonst entsteht ne 7. Zeile; logisch)
und dann einmal die Maus über StringArray, sobald der Debugger unterbricht. Es kommt inhaltlich das gleiche raus wie die Initialdaten -> nix hat sich geändert.
Beachte bitte den Unterschied zwischen Count und GetUpperbound(0), der den Wirkungsunterschied zwischen den Beispielen erzeugt. GetUpperbound(0) gibt eine um 1 kleinere Zahl als Count wieder, eben weil die Indizes nullbasiert sind. Item(0), Item(1), Item(2) -> GetUpperbound(0) gibt den Index des letzten Elements wieder (also 2), während ein "Count" 3 wiedergibt - eben die Item-Anzahl.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.