AGB  ·  Datenschutz  ·  Impressum  







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

Read Write Property

Ein Thema von ozz · begonnen am 31. Mär 2006 · letzter Beitrag vom 4. Apr 2006
Antwort Antwort
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#1

Read Write Property

  Alt 31. Mär 2006, 16:19
Hallo zusammen,
ich bin mal wieder etwas blind. Ich habe eine Klasse MyClass. Diese enthält eine Property Stopwords(mit Lese- und Schreibzugriff). In meinem Hauptprogramm habe ich davon eine Instanz mit dem Namen IMyClass. Wenn ich per .add Werte der Property zuordne, wird die Write der Property nicht aufgerufen. Was mache ich da falsch?
Danke für die Hilfe.
Delphi-Quellcode:

type MyClass = class
 FStopwords:TStringList;
 procedure WriteStopwordlist(value:TStringList);
 
 property Stopwords: TStringList read FStopwords write WriteStopwordlist;
end;
Delphi-Quellcode:
begin;
....
IMyClass.Stopwords.Add(StopwordListView.Items[i].Caption);
...
end
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Read Write Property

  Alt 31. Mär 2006, 16:33
Ändere das Feld und die Setter prozedur auf private, die property auf public.
Außerdem beginnt ein Setter nach Standard mit "Set","set" oder "set_".

Zum Problem: Es gibt keins. Es wird der Getter der Property ausgeführt, damit die StringList Add aufrufen kann.
Dein Feld und die Property enthält doch nur einen Zeiger auf die Liste. Der wird ja nicht geändert, also muss der Setter nicht ausgeführt werden.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Read Write Property

  Alt 31. Mär 2006, 16:33
Du musst es so schreiben damit deine WRITE Prozedur überhaupt aufgerufen wird:IMyClass.Stopwords := EineVariable;//-> implizit -->>WriteStopwordlist(EineVariable);
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#4

Re: Read Write Property

  Alt 31. Mär 2006, 17:51
Danke sniper_w und Elvis, eine Sache verstehe ich aber dann nicht....
Die Property ist von Typ Stringlist. ADD ist Standard bei Stringlist. Daher meine Frage:
1. Wie kann ich der Property einen einzelnen Wert hinzufügen, wenn ich die ADD nicht benutzen kann (bzw. wie in meinem Beispiel die Daten ins Nirvana schieße)? Nochmal implementieren?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Read Write Property

  Alt 31. Mär 2006, 18:07
Wie sniper_w schon sagte, wird bei dir nur READ aufgerufen, da du ja ein Unterelement des Objekts nurtzt, wozu es erstmal ausgelesen (per READ) wird und dann dessen Prozedure aufgerufen wird.

Du müßtest z.B. eine eigene Add-Prozedure erstellen, welche intern FStopwords.ADD aufruft ... z.B.
Delphi-Quellcode:
Procedure TMyClass.StopwordsAdd(S: String);
  Begin
    FStopwords.ADD(S);
  End;

// und so dann aufrufen
IMyClass.StopwordsAdd(StopwordListView.Items[i].Caption);

Was machst'n in WriteStopwordlist?
Der Inhalt von StopwordListView.Items[i].Caption sollte ja dennoch in FStopwords hinzugefügt werden?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#6

Re: Read Write Property

  Alt 31. Mär 2006, 20:04
Hallo himitsu,
ich habe es verstanden, kann aber das Problem nicht lösen. vielleicht dazu noch einige Erläuterungen.
Was macht die Procedure? Stopwordliste ist eine normale TStringlist mit einer Liste von Wörtern. Ich will diese über die Property verwalten und auch in die Datenbank schreiben (writeStopwordlist) und lesen(ReadStoplist). Ich könnte das Lesen und Schreiben der Liste auch in zwei extra public Proceduren auslagern, dann müßte ich es aber explizit anstoßen. Mein Ziel war, diese transparent hinter der Property verschwinden zu lassen (auch die Datenbankzugriffe). Vielleicht ist auch das Konzept das Problem.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Read Write Property

  Alt 31. Mär 2006, 20:45
Na dann laß doch das WRITE einfach weg
property Stopwords: TStringList read FStopwords; und Leite das Ereignis OnChange von FStopwords auf eine Funktion um, welche dann die Datenbank aktualisiert.

Irgendwie so?
Delphi-Quellcode:
Constructor MyClass.Create;
  Begin
    Inherited;
    FStopwords := TStringList.Create;
    FStopwords.OnChange := @Self.WriteStopwordlist;
    ....
  End;
Ansonsten fällt mir auch nichts anderes mehr ein, außer eben noch die Add-Prozedur selber zu erstellen (siehe oben).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#8

Re: Read Write Property

  Alt 4. Apr 2006, 17:14
Danke himitsu.
Das ist genau, was ich gesucht habe.
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:44 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