Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Komponentenprogrammierung, Ereignis reagiert nicht
Jakane - Mi 12.06.13 14:49
Titel: Komponentenprogrammierung, Ereignis reagiert nicht
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 - 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 - 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 - 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 - 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 - 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 - Fr 14.06.13 18:44
Das ist Deine Meinung, ich behalte mir trotzdem eine eigene vor, wenn' s recht ist.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!