Autor |
Beitrag |
Jakane
      
Beiträge: 257
|
Verfasst: Mi 12.06.13 14:49
Hallo liebe Delphi-Helfer
ich habe mir eine kleine Tabellenkomponente gebaut (mit eurer Hilfe) und habe da eine Stringliste die Filterdaten speichert
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| type TJTabelle = class(TCustomPanel) private FFilter: TStringList; ... procedure SetFilter(Value: TStringList); ... property Filter: TStringList read FFilter write SetFilter; ... |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TJTabelle.SetFilter(Value: TStringList); var f : Integer; Spalte, Wert : String; begin DBZ:= Chr(134); FFilter:= Value; For f:= 0 to FFilter.Count - 1 do begin ... end; end; |
Jetzt füge ich dieser Liste eine Zeile hinzu, um meine Tabelle darauf filtern zu lassen, aber die Prozedur in der Komponente reagiert da gar nicht drauf
Also, der Debugger springt nichtmal auf die DBZ-Zuweissung
Delphi-Quelltext 1:
| tabBedingung.Filter.Add('Bedingungstyp: ' Bedingungsart); |
Verrät mir jemand was ich falsch mache? ^^
Danke
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 12.06.13 16:10
Jakane hat folgendes geschrieben : | Hallo liebe Delphi-Helfer
Jetzt füge ich dieser Liste eine Zeile hinzu, um meine Tabelle darauf filtern zu lassen, aber die Prozedur in der Komponente reagiert da gar nicht drauf  |
Also, wenn ich es richtig sehe, ist deine Property vom Typ TStringList. Du müsstest dieser eine neue StringList zuweisen, damit der Setter ausgelöst wird.
Das hinzufügen einer Zeile zu der existierenden StringList hat damit nichts zu tun und kann daher deinen Setter nicht aktivieren.
Habs nur auf die schnelle überflogen, aber ich denke, dass das dein Problem ist.
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Mi 12.06.13 16:33
Ist es wirklich notwendig, dass man die Stringliste von außen ansprechen kann? Vielleicht könnte man auch darüber nachdenken, die Liste intern zu erzeugen und nur indirekten Zugriff über Methoden (AddFilter, DeleteFilter, ClearFilter etc.) zuzulassen.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 12.06.13 17:16
Wenn eine Stringliste von außen zugewiesen wird, sollte nur der Inhalt daraus benutzt werden ( FFilter.Assign(Value);), aber die Liste nicht selbst benutzt werden. Das gibt dann ganz hässliche Fehler, wenn der User draußen die Liste selbst (korrekt) freigibt...
WasWeißDennIch hat folgendes geschrieben : | Ist es wirklich notwendig, dass man die Stringliste von außen ansprechen kann? Vielleicht könnte man auch darüber nachdenken, die Liste intern zu erzeugen und nur indirekten Zugriff über Methoden (AddFilter, DeleteFilter, ClearFilter etc.) zuzulassen. |
Autschn, sowas macht man doch nicht.
Eine Stringlist hat ein OnChange, das kann man verwenden um bei einer Änderung etwas zu machen.
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Mi 12.06.13 17:51
Und was hat das Eine mit dem Anderen zu tun? Wenn ich keine Notwendigkeit sehe, die Liste nach außen verfügbar zu machen, dann tu ich das auch nicht.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 12.06.13 20:38
Da eine TStringList bereits die genannten Methoden hat, macht es keinen Sinn noch einmal welche zu schreiben, die darauf einerseits weiterleiten und andererseits dann auch noch manuell einzeln die Änderung weitergeben...
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Fr 14.06.13 18:44
Das ist Deine Meinung, ich behalte mir trotzdem eine eigene vor, wenn' s recht ist.
|
|
|