AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi generische ObjectList: Löschen eines Elementes
Thema durchsuchen
Ansicht
Themen-Optionen

generische ObjectList: Löschen eines Elementes

Ein Thema von Helmi · begonnen am 26. Jan 2015 · letzter Beitrag vom 27. Jan 2015
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#1

AW: generische ObjectList: Löschen eines Elementes

  Alt 26. Jan 2015, 18:59
ich merkt halt dahingegen dass es funktioniert, dass die MaskeFelder (sind eigentlich Panels) nicht mehr vorhanden sind
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: generische ObjectList: Löschen eines Elementes

  Alt 26. Jan 2015, 19:23
ich merkt halt dahingegen dass es funktioniert
Es funktioniert nur, weil du in der Schleife neu bestimmst, an welcher Position das Element steht das du löschen willst. Die Alternative bei einer reinen Pointer-basierten Liste (fester Index und rückwärts) funktioniert natürlich noch genauso.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: generische ObjectList: Löschen eines Elementes

  Alt 26. Jan 2015, 20:14
ich merkt halt...
Merken <> Wissen. Probiere es lieber aus
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#4

AW: generische ObjectList: Löschen eines Elementes

  Alt 26. Jan 2015, 20:20
huch - da ist ein Problem!

Mist - geändert - aber nie komplett getestet
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: generische ObjectList: Löschen eines Elementes

  Alt 26. Jan 2015, 20:36
Zitat:
Delphi-Quellcode:
procedure Masken_ausblenden(akt_MaskID: String);
  var
    i : Integer;
    MaskeFeld: TMaskeFeld;
  begin
    for MaskeFeld in ObjectList_sichtbare_Masken do
      If MaskeFeld.NameID <> akt_MaskID then
        begin
          MaskeFeld.Visible := false;

          i := ObjectList_sichtbare_Masken.IndexOf(MaskeFeld);
          ObjectList_sichtbare_Masken.Delete(i);
        end;
  end;
Delphi-Quellcode:
procedure Masken_ausblenden(akt_MaskID: String);
  var
    MaskeFeld: TMaskeFeld;
  begin
    for MaskeFeld in ObjectList_sichtbare_Masken.Reverse do
      If MaskeFeld.NameID <> akt_MaskID then
        begin
          MaskeFeld.Visible := False;
          ObjectList_sichtbare_Masken.Remove(MaskeFeld);
        end;
  end;
Aber auch bei generischen Listen kann man für sowas immernoch eine For-Do-Schleife benutzen.

Oder vielleicht auch so?
Delphi-Quellcode:
procedure Masken_ausblenden(akt_MaskID: String);
  var
    MaskeFeld, MaskeFeld2: TMaskeFeld;
  begin
    MaskeFeld := ObjectList_sichtbare_Masken.Find(MaskID); // sowas ist das Erste, was man sich baut - womöglich mit passendem Comperator
    for MaskeFeld2 in ObjectList_sichtbare_Masken do
      MaskeFeld2.Visible := MaskeFeld2 = MaskeFeld;
    ObjectList_sichtbare_Masken.Clear;
    ObjectList_sichtbare_Masken.Add(MaskeFeld);
  end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#6

AW: generische ObjectList: Löschen eines Elementes

  Alt 26. Jan 2015, 20:41
Oder vielleicht auch so?
Delphi-Quellcode:
procedure Masken_ausblenden(akt_MaskID: String);
  var
    MaskeFeld, MaskeFeld2: TMaskeFeld;
  begin
    MaskeFeld := ObjectList_sichtbare_Masken.Find(MaskID); // sowas ist das Erste, was man sich baut - womöglich mit passendem Comperator
    for MaskeFeld2 in ObjectList_sichtbare_Masken do
      MaskeFeld2.Visible := MaskeFeld2 = MaskeFeld;
    ObjectList_sichtbare_Masken.Clear;
    ObjectList_sichtbare_Masken.Add(MaskeFeld);
  end;
Ist gut gemeint (und ein toller Vorschlag) - nur das Visiblen passiert ggf. wo anders
daher ist es nicht so einfach

ich bin jetzt einfach wieder auf die alte for-Schleife umgestiegen, aber halt in Verbindung mit Generics

Delphi-Quellcode:
  procedure Masken_ausblenden(akt_MaskID: String);
  var
    i : Integer;
    MaskeFeld: TMaskeFeld;

  begin
    for i := Pred(ObjectList_sichtbare_Masken.Count) downto 0 do
      begin
        MaskeFeld := ObjectList_sichtbare_Masken.Items[i];

        If MaskeFeld.NameID <> akt_MaskID then
          begin
            MaskeFeld.Visible := false;

            ObjectList_sichtbare_Masken.Delete(i);
          end;
      end;
  end;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: generische ObjectList: Löschen eines Elementes

  Alt 26. Jan 2015, 21:43
Ich finde Iteratoren ja auch ganz elegant, aber wenn ich etwas mit der Liste anstellen muss (oder den Index brauche), dann nehe ich auch die gute alte for-Schleife. Einfach, klar, direkt und kein überflüssiger Firlefanz.

Mich wundert es, das Delphi erlaubt, während der Verwendung eines Iterators die Liste manipulieren zu dürfen. Das ist sehr unsauber.
  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
 
#8

AW: generische ObjectList: Löschen eines Elementes

  Alt 26. Jan 2015, 22:09
Und? Wenn der das nicht erlauben würde dann einfach so
Delphi-Quellcode:
for LItem in MyList.ToArray do
  MYList.Remove( LItem );


Nicht, das jemand meint das wäre jetzt schneller als über den Index, aber es geht halt
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
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.962 Beiträge
 
Delphi 12 Athens
 
#9

AW: generische ObjectList: Löschen eines Elementes

  Alt 27. Jan 2015, 06:53
Mit ToArray mache ich das auch meistens, ja. Der Geschwindigkeitsunterschied ist in den meisten Fällen vernachlässigbar und so ist es einfach schöner lesbar.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: generische ObjectList: Löschen eines Elementes

  Alt 27. Jan 2015, 07:56
Mich wundert es, das Delphi erlaubt, während der Verwendung eines Iterators die Liste manipulieren zu dürfen. Das ist sehr unsauber.
Ich verstehe nicht- Tut es doch auch nicht? Nur weil einem keine Schutzverletzungen um die Ohren fliegen heißt das doch nicht, dass es erlaubt ist nur weil es grade mal funktioniert hat?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:32 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