![]() |
If ... or ... then verwirrt mich
Moin moin,
ich steig grad durch mein eigenes Programm nicht durch... Folgendes ist der Fall:
Delphi-Quellcode:
Ich durchsuche eine Combobox nach den Wörtern YASU und DT... naja..
i := 0;
repeat if (combobox1.items.Strings[i] = 'YASU') or (combobox1.Items.Strings[i] = 'DT') then combobox1.Items.Delete(i); a := combobox1.Items.Count; i := i+1; until i >= combobox1.Items.Count+2; Er löscht immer nur DT, warum? Alternative, damit es funzt ist
Delphi-Quellcode:
Für micht ist das das selbe!? Wenn Yasu oder DT vorkommt lösche den, sonst mach weiter... hmmm
repeat
if combobox1.items.Strings[i] = 'DT' then combobox1.Items.Delete(i); if combobox1.Items.Strings[i] = 'YASU' then combobox1.Items.Delete(i); a := combobox1.Items.Count; i := i+1; until i >= combobox1.Items.Count+2; weitere abhilfe schafft aber auch, wenn ich in der ini datei aus der ich das ganze lade dt und yasu an erster stelle setzt, anstatt an letzter... aber es sollte mit beiden funktionieren, damit ich später nicht in der ini rumfuchteln muss... ps... die variable a ist nur zu debug zwecken grad da, weil ich vorher ne endlosschleife hatte, weil i plötzlich größer war also combo.count und ich dort das > noch nicht dirn hatte... naja :D hab mich halt gewundert ;) deswegen auch die +2 für zwei gelöschte einträge. mfg Marcel |
Re: If schleife verwirrt mich
Erst einmal gibt es keine if-Schleife. Und dann hab ich noch nicht ganz begriffen, was Du vorhast. Sollen alle Einträge gelöscht werden, die YASU oder DT an beliebiger Stelle enthalten?
|
Re: If schleife verwirrt mich
Zitat:
combobox1.Items.Delete(i); ;) ja wie gesagt ist einfach eine ini datei.. alle sections werden in die combobox geladen und die die dt oder yasu enthalten sollen nicht angezeigt/gelöscht werden sry, if schleife ist doof ;) aber halt die repeat schleife führt das if ständig wieder aus :D |
Re: If schleife verwirrt mich
Hallo!
Besser ist es mit einer for-Schleife zu machen!
Delphi-Quellcode:
lg
for I := ComboBox1.Items.Count-1 DownTo 0 do
if (ComboBox1.Items[I] = 'YASU') or (ComboBox1.Items[I] = 'DT') then ComboBox1.Items.Delete(I); |
Re: If schleife verwirrt mich
das funzt....
aber warum das mit der repeat until schleife nicht???? ^^ ich wills ja einfach nur verstehn, damit ich ein wenig schlauer werde |
Re: If schleife verwirrt mich
Dann würde ich das so machen:
Delphi-Quellcode:
[edit] Wo kommen denn die Beiträge auf einmal her? Außerdem ist eine repeat-Schleife hier nicht angesagt, da man evtl. auf einen nicht existenten Eintrag zugreift.[/edit]
ComboBox.Items.BeginUpdate;
try for i := ComboBox.Items.Count - 1 downto 0 do if AnsiContainsText(ComboBox.Items[i],'yasu') or AnsiContainsText(ComboBox.Items[i],'dt') then ComboBox.Items.Delete(i); finally ComboBox.Items.EndUpdate; end; |
Re: If ... or ... then verwirrt mich
hmmm...
das verwirrt mich zu sehr ;) hab nich mal ne ahnung, wozu combobox.items.beginupdate da ist. wie gesagt die verison da vor funzt, ich nehm die und nun ja... mein erstes prob ist immernoch nich gelöst.. warum funktioniert das nicht? |
Re: If ... or ... then verwirrt mich
Das Problem ist, dass du nach Löschen ja die Anzahl und den Index des nachfolgenden Eintrages löscht. In einem solchen Fall, laufe ich immer die Liste von oben nach unten durch, dann verschieben sich die Indices nicht.
|
Re: If ... or ... then verwirrt mich
Funktioniert es denn so?
Delphi-Quellcode:
i := 0;
repeat if (combobox1.items.Strings[i] = 'YASU') or (combobox1.Items.Strings[i] = 'DT') then combobox1.Items.Delete(i) else i := i+1; a := combobox1.Items.Count; until i >= combobox1.Items.Count; |
Re: If ... or ... then verwirrt mich
Die Zeile
Delphi-Quellcode:
scheint falsch zu sein. Richtig wäre
until i >= combobox1.Items.Count+2;
Delphi-Quellcode:
until i > combobox1.Items.Count - 1;
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 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