![]() |
gemeinsamer Event Handler für viele Objekte?
Hi,
Ich habe auf meinem Formular ca. 40 Edit Felder in die aber nur Zahlen eingegeben werden dürfen. Jetzt möchte ich nicht für jedes einzelne ein eiegenes onChange Event deklarieren, sondern das ganze lieber pauschal lösen. In meinem Buch Delphi 7 - Grundlagen und Profiwissen wird das so gelöst:
Delphi-Quellcode:
allerdings müsste das ganze dann doch tierisch ressourcen verbrauchen, wenn jedesman wenn das Event auftritt ein neuer Zeiger erstellt wird der auf das Objekt zeigt oder nicht? Die Zeiger werden ja nicht entfernt, oder hab ich da etwas falsch verstanden?var edField: TEdit; ... procedure TForm1.EditClick(Sender: TObject); (* gemeinsamer Event-Handler für alle Editierfelder *) begin edField:=TEdit(Sender); (* auf dieses Feld wurde geklickt *) edField.Color:=clYellow (* gelbe Markierung *) (* edField.Free geht leider hier nicht, da eine Komponente nicht innerhalb ihres eigenen Event-Handlers entfernt werden darf!!! *) end; Ich bin nicht so ganz fitt in Objektorientierung. schonmal danke für eure hilfe :) |
Re: gemeinsamer Event Handler für viele Objekte?
der ressourcenverbrauch ist der gleiche. In dem Quellcode des edits steht sinngemäß sowas:
Zitat:
Was mit in dem buch des öfteren aufgefallen ist, das mit globalen Variablen gearbeitet wird. Wenn du dir das allerdings angewöhnst wirst du dich bei vielen sehr unbeliebt machen (hat nämlich nix mit objektorientierung zu tun.) änder einfach
Delphi-Quellcode:
in
var edField: TEdit;
... procedure TForm1.EditClick(Sender: TObject); begin edField:=TEdit(Sender); edField.Color:=clYellow; end;
Delphi-Quellcode:
um und du wirst hier in der DP und eventuell bei deinem späteren Arbeitgeber mehr freunde haben.
procedure TForm1.EditClick(Sender: TObject);
var edField: TEdit; //also local in der Procedure definieren, das reicht voll aus begin edField:=TEdit(Sender); edField.Color:=clYellow; end; |
Re: gemeinsamer Event Handler für viele Objekte?
jo das hab ich auch gemerkt und genau so umgesetzt wie du es geschrieben hast. Ich kann globale Variablen ohnehin nicht leiden. :)
und danke für deine Info, das ganze klappt prima, ich mag gar nicht dran denken wenn ich das alles hätte einzeln deklarieren müssen :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 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