AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

If ... or ... then verwirrt mich

Ein Thema von hellow554 · begonnen am 1. Apr 2010 · letzter Beitrag vom 3. Apr 2010
Antwort Antwort
Seite 2 von 2     12   
hellow554

Registriert seit: 29. Mär 2009
Ort: Bargteheide
9 Beiträge
 
#11

Re: If ... or ... then verwirrt mich

  Alt 1. Apr 2010, 17:25
zack 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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: If ... or ... then verwirrt mich

  Alt 1. Apr 2010, 17:28
Nein, BeginUpdate sorgt nur dafür, dass die Items während der Abarbeitung nicht neu gezeichnet werden, solange bis das entsprechende EndUpdate folgt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#13

Re: If ... or ... then verwirrt mich

  Alt 1. Apr 2010, 17:32
Zitat von hellow554:
also bewirkt das beginupdate, dass die indexe (indicies sieht genauso bescheuert aus ^^) gleich bleiben und sich nicht verschieben
Nope
Zitat:
TStrings simply keeps track of when the list of strings is being changed. Some descendants of TStrings use this information to perform certain actions, such as telling a control to repaint, when updates are complete.
Es wird also nur die "Es-hat-sich-was-verändert"-Nachricht unterdrückt, die das Neuzeichnen anstößt.
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#14

Re: If ... or ... then verwirrt mich

  Alt 1. Apr 2010, 18:18
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.

a) Schleife rückwärts
b) oder beim Löschen nicht weitergehn
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#15

Re: If ... or ... then verwirrt mich

  Alt 1. Apr 2010, 18:20
Edit: Ok wieder zu langsam.
Delphi-Quellcode:
if (combobox1.items.Strings[i] = 'YASU') or (combobox1.Items.Strings[i] = 'DT') then
  combobox1.Items.Delete(i);
ist nicht dasselbe wie
Delphi-Quellcode:
if combobox1.items.Strings[i] = 'DTthen
  combobox1.Items.Delete(i);
if combobox1.Items.Strings[i] = 'YASUthen
  combobox1.Items.Delete(i);
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.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#16

Re: If ... or ... then verwirrt mich

  Alt 1. Apr 2010, 18:53
Zitat von samso:
Delphi-Quellcode:
if (combobox1.items.Strings[i] = 'YASU') or (combobox1.Items.Strings[i] = 'DT') then
  combobox1.Items.Delete(i);
ist nicht dasselbe wie
Delphi-Quellcode:
if combobox1.items.Strings[i] = 'DTthen
  combobox1.Items.Delete(i);
if combobox1.Items.Strings[i] = 'YASUthen
  combobox1.Items.Delete(i);
Der Quellcode macht exakt das gleiche also ist diese Bemerkung nicht ganz richtig.

Zitat von samso:
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.
JA.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von rwachtel
rwachtel

Registriert seit: 26. Aug 2004
Ort: Köln
530 Beiträge
 
RAD-Studio 2010 Pro
 
#17

Re: If ... or ... then verwirrt mich

  Alt 1. Apr 2010, 22:33
Zitat von rollstuhlfahrer:
[...] Der Quellcode macht exakt das gleiche also ist diese Bemerkung nicht ganz richtig. [...]
Nein, das macht er nicht - wie Du ja auch eine Zeile später selbst bestätigst:

Zitat:
[...]

JA.

Bernhard
Robert Wachtel
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: If ... or ... then verwirrt mich

  Alt 1. Apr 2010, 22:50
Mit einem else würde er dasselbe machen.
Delphi-Quellcode:
if combobox1.items.Strings[i] = 'DTthen
  combobox1.Items.Delete(i)
else if combobox1.Items.Strings[i] = 'YASUthen
  combobox1.Items.Delete(i);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

Re: If ... or ... then verwirrt mich

  Alt 3. Apr 2010, 00:02
1. Dafür nimmt man kein REPEAT...UNTIL sondern ein WHILE...DO
Delphi-Quellcode:
i := 0;
while i < ComboBox1.Items.Count do
  begin
  end;
, denn so gibt es keine Zugriffsfehler, wenn keine Elemente in der Liste stehen.
2. Was passiert bei Delete?
ComboBox1.Items
Code:
(0)Hallo
(1)YASU
(2)DT
(3)du da
wenn wir jetzt zu dieser Zeile ( i ist 1) kommen
ComboBox1.Items.Delete( i ); dann sieht ComboBox1.Items so aus
Code:
(0)Hallo
(1)DT
(2)du da
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!
Also sollte man nach einem Delete den Index nicht höchzählen, weil einem dann eine Zeile immer entwischt
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz