Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   If ... or ... then verwirrt mich (https://www.delphipraxis.net/149887-if-then-verwirrt-mich.html)

hellow554 1. Apr 2010 17:05


If ... or ... then verwirrt mich
 
Moin moin,

ich steig grad durch mein eigenes Programm nicht durch...

Folgendes ist der Fall:

Delphi-Quellcode:
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;
Ich durchsuche eine Combobox nach den Wörtern YASU und DT... naja..
Er löscht immer nur DT, warum?
Alternative, damit es funzt ist
Delphi-Quellcode:
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;
Für micht ist das das selbe!? Wenn Yasu oder DT vorkommt lösche den, sonst mach weiter... hmmm
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

DeddyH 1. Apr 2010 17:07

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?

hellow554 1. Apr 2010 17:09

Re: If schleife verwirrt mich
 
Zitat:

Zitat von DeddyH
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?

sollte diese zeile sagen:

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

IceBube 1. Apr 2010 17:12

Re: If schleife verwirrt mich
 
Hallo!

Besser ist es mit einer for-Schleife zu machen!

Delphi-Quellcode:
  for I := ComboBox1.Items.Count-1 DownTo 0 do
    if (ComboBox1.Items[I] = 'YASU') or (ComboBox1.Items[I] = 'DT') then
      ComboBox1.Items.Delete(I);
lg

hellow554 1. Apr 2010 17:14

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

DeddyH 1. Apr 2010 17:15

Re: If schleife verwirrt mich
 
Dann würde ich das so machen:
Delphi-Quellcode:
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;
[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]

hellow554 1. Apr 2010 17:19

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?

MrSpock 1. Apr 2010 17:22

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.

DeddyH 1. Apr 2010 17:23

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;

dominikkv 1. Apr 2010 17:24

Re: If ... or ... then verwirrt mich
 
Die Zeile
Delphi-Quellcode:
until i >= combobox1.Items.Count+2;
scheint falsch zu sein. Richtig wäre
Delphi-Quellcode:
until i > combobox1.Items.Count - 1;
Zitat:

Zitat von hellow554
hab nich mal ne ahnung, wozu combobox.items.beginupdate da ist.

Delphi-Referenz durchsuchenTComboBox.Items.BeginUpdate verhindert das Neuzeichnen der ComboBox und beschleunigt daher das Programm. Das muss mit .EndUpdate natürlich wieder aufgehoben werden. Und zur Sicherheit, damit das auch wirklich aufgehoben wird, ist der Schutzblock da.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 Uhr.
Seite 1 von 2  1 2      

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