![]() |
Bestimmten Eintrag auus StringList löschen
Hi,
Delphi-Quellcode:
Auch wenn die bedingung erfüllt ist wird der eintrag nicht gelöscht..
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var lLine: Integer; Begin lLine := 0; While ( lLine < onlist.Count ) Do If onlist.strings[lLine] = Edit2.Text Then Begin onlist.delete(lLine); End; end; ich weiß leider nich warum, ich hoffe ihr könnt mir helfen??? Manchmal gibt es einen Fehler dass das Maximum überschritten werde ... Gruß ByStones |
Re: Bestimmten Eintrag auus StringList löschen
Wo zählst denn du deinen Zähler hoch?
Das ganze geht auch irgendwie so:
Delphi-Quellcode:
onList.delete(onlist.indexof(edit2.text));
Edit: Schreibfehler..hab mal aus dem onLust ein onList gemacht. |
Re: Bestimmten Eintrag auus StringList löschen
Eine etwas andere Herangehensweise. :)
Delphi-Quellcode:
Es werden alle Einträge gelöscht und man läuft nicht Gefahr über die Grenzen hinauszulaufen. :)
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; begin for i := Memo1.Lines.Count -1 downto 0 do begin if (Memo1.Lines[i] = Edit1.Text) then Memo1.Lines.Delete(i); end; end; |
Re: Bestimmten Eintrag auus StringList löschen
Zitat:
bei deinem code passiert dass was bei mir auch passiert, der name wird bei jedem start eins mehr... |
Re: Bestimmten Eintrag auus StringList löschen
Ich denke, das Beil liegt woanders begraben. Wird die Procedure überhaupt aufgerufen? Leg mal nen Breakpoint [F5] innerhalb dieser Prozedur!
|
Re: Bestimmten Eintrag auus StringList löschen
Zitat:
ich hab keinen plan wo der fehler liegt, soll ich mal den kompletten code posten ??? |
Re: Bestimmten Eintrag auus StringList löschen
Zitat:
-Deklaration von onlist -Wo wird sie created, wo aufgelöst -Wo beschrieben und -->alles was mit onlist so zu tun hat |
Re: Bestimmten Eintrag auus StringList löschen
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin Size := 256; SetLength(Benutzername, Size); GetUserName(PChar(Benutzername), Size); SetLength(Benutzername, Size); if(benutzername='KatevasK') or (benutzername='HamannL') then close; Edit2.Text := BenutzerName; list := TStringList.Create; ini := tinifile.create(extractfilepath(paramstr(0))+'pfade.ini'); pfad := ini.ReadString('pfade', 'serverpfad', ''); Memo1.ReadOnly := true; onlist:=TStringList.Create; pfad2:=ini.ReadString('pfade','on',''); onlist.LoadFromFile(pfad2); onlist.Add(benutzername); onlist.SaveToFile(pfad2); ii:=-1; i:=onlist.Count; if i=ii then begin ii:=-1; end; for i := 0 to OnList.Count -1 do ListBox1.Items.Add(OnList.Strings[i]); end;
Delphi-Quellcode:
das is es
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var y: Integer; begin for y := Memo1.Lines.Count -1 downto 0 do begin if (Memo1.Lines[y] = Edit1.Text) then Memo1.Lines.Delete(y); end; end; |
Re: Bestimmten Eintrag auus StringList löschen
Hallo,
dein Code löscht die durch Edit2 bestimmten Zeilen nur dann, wenn sie am Anfang von onList stehen, weil du deinen index nicht anpasst.
Delphi-Quellcode:
Getippt und nicht getestet.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var lLine: Integer; Begin lLine := 0; // onlist.BeginUpdate; While ( lLine < onlist.Count ) Do If SameText(onlist[lLine], Edit2.Text) Then onlist.delete(lLine) Else Inc(lLine); // onlist.EndUpdate; end; Grüße vom marabu |
Re: Bestimmten Eintrag auus StringList löschen
Ja, und wo löscht du den Namen wieder aus der Liste am Ende? Du sagtest, er solle am Ende wieder rausgelöscht werden - davon sehe ich nichts. OnList und Memo1 sind unterschiedliche Dinge und zum anderen sehe ich nicht, wo du die Liste ein zweites Mal speicherst...
marabu: AnsiSameText(): Komma zwischen den beiden Argumenten vergessen umzustellen... |
Re: Bestimmten Eintrag auus StringList löschen
Zitat:
Delphi-Quellcode:
Update:
[Pascal Fehler] Unit1.pas(204): E2250 Es gibt keine überladene Version von 'SameText', die man mit diesen Argumenten aufrufen kann
[Pascal Fehler] Unit1.pas(204): E2010 Inkompatible Typen: 'string' und 'Boolean' [Pascal Warnung] Unit1.pas(243): W1019 FOR-Schleifenvariable muss eine einfache lokale Variable sein [Pascal Fataler Fehler] Chat.dpr(5): F2063 Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
Delphi-Quellcode:
so habs ich jetzt und es geht auch nicht, langsam glaub ich delphi mag mich nich ma
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var lLine: Integer; Begin lLine := 0; // onlist.BeginUpdate; While ( lLine < onlist.Count ) Do If AnsiSameText(onlist[lLine],Edit2.Text) Then onlist.delete(lLine) Else Inc(lLine); // onlist.EndUpdate; end; ehr ... |
Re: Bestimmten Eintrag auus StringList löschen
Du solltest nach dem Löschen deine Liste noch einmal speichern (savetofile).
Nur delete, löscht zwar den Eintrag im Hauptspeicher, aber nicht auf der Festplatte. Und lass, das mal mit dem Memo, das war nur ein Beispiel von xyz, was nicht direkt in deinen Code passt Soll das ein multiuser-Programm werden. Dann musst du für diese Datei noch ein paar Sicherheiten einbauen. |
Re: Bestimmten Eintrag auus StringList löschen
Ja, wie ich schon geschrieben hatte...
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var lLine: Integer; Begin lLine := 0; // onlist.BeginUpdate; While ( lLine < onlist.Count ) Do If SameText(onlist[lLine], Edit2.Text) Then onlist.delete(lLine) Else Inc(lLine); // onlist.EndUpdate; end; |
Re: Bestimmten Eintrag auus StringList löschen
es geht danke für die hilfe !!!
jaajajaja es geht !!! :-D :-D :-D :-D :-D :-D :-D danke !!!!!!!!!!!!11 :cheers: |
Re: Bestimmten Eintrag auus StringList löschen
Ich würde das mal im Debugger durchsteppen.
@Muetze1: Danke für den Hinweis - habe es schnell geändert. |
Re: Bestimmten Eintrag auus StringList löschen
@muetze, @marabu, @st_ett
ihr müsst nicht selber nach dem Text in einer Schleife suchen. Das erledigt das Objekt für euch mit dem property indexof |
Re: Bestimmten Eintrag auus StringList löschen
@sirius: Das ist uns klar, aber im Gegensatz zu deinem Code löschen wir alle Vorkommen des Eintrages, du nur den ersten. Auch würde dein Code eine Exception EOutOfBounds werfen, wenn der Eintrag nicht vorhanden ist.
/EDIT: IndexOf() ist eine Methode und keine Property :warn: |
Re: Bestimmten Eintrag auus StringList löschen
Zitat:
Ich müßte dann zumindest eine Schleife laufen lassen, die abprüft ob Indexof noch etwas zurückliefert. Und ich denke mal IndexOf wird auch nicht viel anderes machen als die Liste per Schleife durchzugehen. Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:08 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