![]() |
Re: If ... or ... then verwirrt mich
zack :D nagel aufm kopf getroffen ^^
okay ;) also bewirkt das beginupdate, dass die indexe (indicies sieht genauso bescheuert aus ^^) gleich bleiben und sich nicht verschieben, was bei mir ja der fall wäre, da ich ja einen lösche... okay okay ;) verstanden und danke :D |
Re: If ... or ... then verwirrt mich
Nein, BeginUpdate sorgt nur dafür, dass die Items während der Abarbeitung nicht neu gezeichnet werden, solange bis das entsprechende EndUpdate folgt.
|
Re: If ... or ... then verwirrt mich
Zitat:
Zitat:
|
Re: If ... or ... then verwirrt mich
Wenn du von vorn nach hinten durchgehst und was löschst und auch beim Löschen den Index hochzählst, dann überspringst du den nachfolgenden Eintrag, da dieser ja an die Stelle des Gelöschten rutscht. :zwinker:
a) Schleife rückwärts b) oder beim Löschen nicht weitergehn |
Re: If ... or ... then verwirrt mich
Edit: Ok wieder zu langsam.
Delphi-Quellcode:
ist nicht dasselbe wie
if (combobox1.items.Strings[i] = 'YASU') or (combobox1.Items.Strings[i] = 'DT') then
combobox1.Items.Delete(i);
Delphi-Quellcode:
weil zwischen den beiden IF's der Index i nicht geändert wird. Bei der ersten Version ändert sich der Index. Wenn also 'DT' und 'YASU' in der Liste direkt hintereinander stehen, wird bei der ersten Version nur DT gelöscht, bei der zweiten Version wird erst 'DT' gelöscht dann rückt 'YASU' an die Position von 'DT' und dann wird 'YASU' gelöscht.
if combobox1.items.Strings[i] = 'DT' then
combobox1.Items.Delete(i); if combobox1.Items.Strings[i] = 'YASU' then combobox1.Items.Delete(i); |
Re: If ... or ... then verwirrt mich
Zitat:
Zitat:
Bernhard |
Re: If ... or ... then verwirrt mich
Zitat:
Zitat:
|
Re: If ... or ... then verwirrt mich
Mit einem else würde er dasselbe machen.
Delphi-Quellcode:
if combobox1.items.Strings[i] = 'DT' then
combobox1.Items.Delete(i) else if combobox1.Items.Strings[i] = 'YASU' then combobox1.Items.Delete(i); |
Re: If ... or ... then verwirrt mich
1. Dafür nimmt man kein REPEAT...UNTIL sondern ein WHILE...DO
Delphi-Quellcode:
, denn so gibt es keine Zugriffsfehler, wenn keine Elemente in der Liste stehen.
i := 0;
while i < ComboBox1.Items.Count do begin end; 2. Was passiert bei Delete? ComboBox1.Items
Code:
wenn wir jetzt zu dieser Zeile ( i ist 1) kommen
(0)Hallo
(1)YASU (2)DT (3)du da
Delphi-Quellcode:
dann sieht ComboBox1.Items so aus
ComboBox1.Items.Delete( i );
Code:
Wenn jetzt im nächsten Schritt i um 1 erhöht wird ( i ist dann ja 2 ), dann wird die (jetzige) Zeile 1 nicht mehr überprüft!
(0)Hallo
(1)DT (2)du da Also sollte man nach einem Delete den Index nicht höchzählen, weil einem dann eine Zeile immer entwischt :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz