![]() |
Stringlisten in mehreren Prozeduren nutzen
Hallo,
wenn ich wie folgt Stringlisten nutze, bekomme ich eine Zugriffsverletzung:
Delphi-Quellcode:
Muss die Stringlist nach jedem Schreiben geschlossen werden? Wenn ja, wie hänge ich an?var sl:TStringlist; Procedure A; Begin SL := TStringList.Create; SL('Text ; Text'); b; c; end; Procedure b; Begin SL.Add('Text ; Text'); //<-Exception end; Procedure c; Begin SL.SaveToFile('datei.csv'); end; MFG Steffen |
Re: Stringlisten in mehreren Prozeduren nutzen
Hallo,
die Stringliste ist nur dort gültig, wo Du sie erzeugst. Du solltest sie also global erzeugen. Edit: Schwachsinn - ich meine natürlich, dass sie nur dort gültig ist, wo Du sie deklarierst. Edit2: Zitat:
Allgemein: Wenn Du eine Stringliste in allen Methoden einer Klasse benutzen möchtest, dann solltest Du sie auch in der Klasse deklarieren. Am Beispiel einer Klasse TForm1 sieht das dann ungefähr so aus:
Delphi-Quellcode:
Du könntest dann auf 'sl' in allen Methoden Deiner Klasse 'TForm1' zugreifen.
Unit Unit1;
Interface Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; Type TForm1 = Class(TForm) Procedure FormCreate(Sender: TObject); Procedure FormDestroy(Sender: TObject); private sl: TStringlist; End; Var Form1: TForm1; Implementation {$R *.dfm} Procedure TForm1.FormCreate(Sender: TObject); Begin sl := TStringlist.Create; End; Procedure TForm1.FormDestroy(Sender: TObject); Begin FreeAndNil(sl); End; End. Willst Du auch in klassenfremden Methoden auf sl zugreifen, so musst Du die Sichtbarkeit erhöhen, oder eine Property mit entsprechenden read/write-Methoden zur Verfügung stellen, oder die Stringliste global deklarieren. Edit3: Rechtschreibfehler in Edit2 behoben :mrgreen: |
Re: Stringlisten in mehreren Prozeduren nutzen
Ich kann das Problem nicht nachvollziehen :gruebel:
Hier mal eine Testunit:
Delphi-Quellcode:
unit UnitNix;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private-Deklarationen } sl: TStringList; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin sl := TStringList.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin if Assigned(sl) then FreeAndNil(sl); end; procedure TForm1.Button1Click(Sender: TObject); begin if Assigned(sl) then begin sl.Add('eine Zeile'); Button2Click(self); Button3Click(self); end; end; procedure TForm1.Button2Click(Sender: TObject); begin if Assigned(sl) then sl.Add('eine weitere Zeile'); end; procedure TForm1.Button3Click(Sender: TObject); begin if Assigned(sl) then sl.SaveToFile('C:\blablubb.txt'); end; end. |
Re: Stringlisten in mehreren Prozeduren nutzen
Das sollte so aber funktionieren...
|
Re: Stringlisten in mehreren Prozeduren nutzen
Vielleicht hat er seine Variable in einer Klasse deklariert. Lt. seines Quelltextes sieht es zwar nach einer globalen Deklaration aus, aber vielleicht ist das einfach nur ein Copy&Paste-Fehler...
|
Re: Stringlisten in mehreren Prozeduren nutzen
Somit fischen wir mal wieder im Trüben.
|
Re: Stringlisten in mehreren Prozeduren nutzen
Vielleicht kommt der Fehler auch daher:
Delphi-Quellcode:
Das self bezieht sich nämlich auf das Form und nicht auf den Button1.
Button2Click(self);
Button3Click(self); Besser wäre vermutlich:
Delphi-Quellcode:
Button2Click(Sender);
Button3Click(Sender); |
Re: Stringlisten in mehreren Prozeduren nutzen
Moment, bei mir kommt kein Fehler, nicht verwechseln ;)
|
Re: Stringlisten in mehreren Prozeduren nutzen
Zitat:
Edit: Delphi-Tag geöffnet |
Re: Stringlisten in mehreren Prozeduren nutzen
Er fragt ab, ob die Variable ein Objekt referenziert
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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