AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Stringlisten in mehreren Prozeduren nutzen
Thema durchsuchen
Ansicht
Themen-Optionen

Stringlisten in mehreren Prozeduren nutzen

Ein Thema von WIng2005 · begonnen am 23. Aug 2007 · letzter Beitrag vom 28. Aug 2007
Antwort Antwort
Seite 1 von 3  1 23      
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#1

Stringlisten in mehreren Prozeduren nutzen

  Alt 23. Aug 2007, 14:14
Hallo,

wenn ich wie folgt Stringlisten nutze, bekomme ich eine
Zugriffsverletzung:

Delphi-Quellcode:

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;
Muss die Stringlist nach jedem Schreiben geschlossen werden? Wenn ja, wie hänge ich an?

MFG
Steffen
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#2

Re: Stringlisten in mehreren Prozeduren nutzen

  Alt 23. Aug 2007, 14:19
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 von WIng2005:
Muss die Stringlist nach jedem Schreiben geschlossen werden? Wenn ja, wie hänge ich an?
Nein.

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:
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.
Du könntest dann auf 'sl' in allen Methoden Deiner Klasse 'TForm1' zugreifen.
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Stringlisten in mehreren Prozeduren nutzen

  Alt 23. Aug 2007, 14:35
Ich kann das Problem nicht nachvollziehen
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.
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 RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Stringlisten in mehreren Prozeduren nutzen

  Alt 23. Aug 2007, 15:16
Das sollte so aber funktionieren...
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#5

Re: Stringlisten in mehreren Prozeduren nutzen

  Alt 23. Aug 2007, 15:22
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...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Stringlisten in mehreren Prozeduren nutzen

  Alt 23. Aug 2007, 15:24
Somit fischen wir mal wieder im Trüben.
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 RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Stringlisten in mehreren Prozeduren nutzen

  Alt 23. Aug 2007, 15:27
Vielleicht kommt der Fehler auch daher:
Delphi-Quellcode:
Button2Click(self);
Button3Click(self);
Das self bezieht sich nämlich auf das Form und nicht auf den Button1.
Besser wäre vermutlich:
Delphi-Quellcode:
Button2Click(Sender);
Button3Click(Sender);
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Stringlisten in mehreren Prozeduren nutzen

  Alt 23. Aug 2007, 15:37
Moment, bei mir kommt kein Fehler, nicht verwechseln
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
s-off
(Gast)

n/a Beiträge
 
#9

Re: Stringlisten in mehreren Prozeduren nutzen

  Alt 23. Aug 2007, 15:48
Zitat von DeddyH:
Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  if Assigned(sl) then
    FreeAndNil(sl);
end;
Was bezweckst Du in dem Fall eigentlich mit dem 'Assigned'?

Edit: Delphi-Tag geöffnet
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Stringlisten in mehreren Prozeduren nutzen

  Alt 23. Aug 2007, 15:49
Er fragt ab, ob die Variable ein Objekt referenziert
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 23:11 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