Autor Beitrag
cokotech
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 17



BeitragVerfasst: Mi 29.03.06 08:11 
Sorry... habe noch ne frage zu den Variablen Procedurennamen diesmla nur andersrum.

Wenn ich nun an anderer Stelle bei 40 verschiedenen editfeldern auf ereignisse reagieren will und zwar immer genauso dann dachte ich ich könnte bei allen auf EINE Procedure verweisen und das jeweilige feld mit SENDER abfragen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Procedure TForm1.EditChange(Sender: TObject);
begin
With sender do
Try
 StrToInt(text);
 EXCEPT
  BEGIN
   If length(Text)<>0 then text:='0';
  END;
 END;
end;


leider verweist SENDER immer auf form1 was ich daran merke, das sich bei änderungen die Titelleiste ändert :autsch:


Gruß CokoTEch

Moderiert von user profile iconUGrohne: Beitragsformatierung überarbeitet.
Moderiert von user profile iconTino: Titel geändert.
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 29.03.06 08:19 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if Sender is TEdit then
  with TEdit (Sender) do
  begin
  end;

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mi 29.03.06 08:23 
Kroko hat in gewisser Weise recht. Aber noch zur Erklärung: Du rufst die Eigenschaft Text der aktuellen Klasse auf, das ist das Form selbst, weil die Prozedur darin deklariert ist. Damit greifst Du dann nicht auf das Edit, sondern auf das Form zu. Du musst mit dem Sender arbeiten und dort die Eigenschaft Text verwenden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Procedure TForm1.EditChange(Sender: TObject);
begin
With sender do
Try
 StrToInt((sender as TEdit).text);
 EXCEPT
  BEGIN
   If length((sender as TEdit).Text)<>0 then (sender as TEdit).text:='0';
  END;
 END;
end;

Du musst dazu aber mit (sender as TEdit). einen Typecast machen, da Sender ja eine Instanz der Klasse TObject ist. Weiterhin solltest Du Dir das StrToInt nochmal genauer anschauen, willst Du damit überprüfen, ob das eingegebene eine Zahl ist? Nicht besonders angenehm für den Anwender, weil er bei Eingabe eines Buchstabens eine Exception bekommt. Da solltest Du Dir mal StrToIntDef anschauen.
cokotech Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 17



BeitragVerfasst: Mi 29.03.06 08:48 
Genial.... vielen Dank euch beiden.....


Gruß Sven!
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 29.03.06 08:55 
user profile iconUGrohne hat folgendes geschrieben:
...Du musst dazu aber mit (sender as TEdit). einen Typecast machen, da Sender ja eine Instanz der Klasse TObject ist. ....


(a) Irgend wokam mal zu Tage, dass, wenn ich weiß das Sender TEdit ist, dass dann TEdit(Sender) schneller ist als (Sender as TEdit)
(b) with Sender do wirkt bei dir irgendwie umsonst :wink:

mfg

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mi 29.03.06 09:20 
user profile iconKroko hat folgendes geschrieben:
(a) Irgend wokam mal zu Tage, dass, wenn ich weiß das Sender TEdit ist, dass dann TEdit(Sender) schneller ist als (Sender as TEdit)

Das weiß ich nicht, hab ich auch noch nie ausprobiert ;)
user profile iconKroko hat folgendes geschrieben:
(b) with Sender do wirkt bei dir irgendwie umsonst :wink:

Ich hab schon gesehen, dass Du das eingebaut hattest, aber ich fand, dass ihn das evtl. nur noch mehr verwirrt und ihm den Fehler nicht wirklich deutlich macht, den er hat. Denn dann steht ja innerhalb dieses Blocks wieder nur Text alleine und nichts deutet erstmal darauf hin, dass das eine Eigenschaft vom Sender sein soll. Also nichts für ungut ;)