Sender ausfindig machen

Hallo zusammen

Ich löse mit Button1, Button2 und Button3 bei einem Click das Ereignis „procedure TForm1.Button1(Sender: Tobject)“ auf. Ich weiss nicht wirklich wie ich mit dem Parameter „Sender“ hantieren kann.

  1. Kann ich den gedrückten Button aus dem „Sender“ ausfindig machen?
  2. Kann ich den Gedrücken Button einer Variable zuweisen, zB. „x“ die „x: TButton;“ deklariert wurde, zuweisen?
  3. Oder kann ich sonst auf die Eigenschaften von geklickten Button zugreifen, wie Visible, Color, etc.?

Gruss jjep

Hallo jjep,

(Sender as TButton).Name

gibt den Namen des Buttons zurück.

(Sender as TButton).Tag

gibt den Tag des Button zurück usw.

HTH
Manfred

Nachtrag
Du weist natürlich allen Buttons die gleiche Procedure für das onClick Ereignis zu.

Manfred

(Sender as TButton).Name gibt den Namen des Buttons
zurück.

Geht leider nicht :frowning:
denn Borland Studio ,meine Entwicklungsumgebung, gibt die Form von der ButtonClick-Methode vor…
und die ist: procedure TForm1.Button1Click(Sender: TObject)

Aber danke für die Antwort

(Sender as TButton).Name gibt den Namen des Buttons
zurück.

Geht leider nicht :frowning:

Doch, geht.

denn Borland Studio ,meine Entwicklungsumgebung, gibt die Form
von der ButtonClick-Methode vor…
und die ist: procedure TForm1.Button1Click(Sender: TObject)

Im Object Inspector kannst Du unter Events für einen zweiten Button die onClick Procedure des ersten Buttons auswählen.
Und dann:

procedure TForm1.Button1Click(Sender: TObject
begin
 if (Sender as TButton).Name = 'Button1' Then
 begin
 // mach was
 end
 else if (Sender as TButton).Name = 'Button2' Then
 begin
 // mach was anderes
 end;
end;

Manfred

Stimmt geht

Doch, geht.

Danke vielmals
Ich kannte das „as“ nicht

Hi jjep,

noch ein kleiner Zusatz von mir. Schreibarbeit spart man wenn man

(Sender as TButton).

durch

TButton(Sender).

ersetzt. Macht genau das selbe.

Gruß Michi

Doch, geht.

Danke vielmals
Ich kannte das „as“ nicht

Hi jjep,

noch ein kleiner Zusatz von mir. Schreibarbeit spart man wenn
man

(Sender as TButton).

durch

TButton(Sender).

ersetzt. Macht genau das selbe.

Hallo,

tut es nicht, jedenfalls nicht nach der Definition: bei „as“ wird geprüft, ob Sender auch wirklich TButton ist, sonst wird eine Exception auf den Tisch des Hauses geworfen - man weiss also Bescheid und kann den Fall auch behandeln. Bei einem einfachen TypeCast stürzt je nachdem das Programm einfach ab (es sei denn, der Compiler fügt hinterrücks eine solche Prüfung ein, aber davon habe ich noch nichts gehört oder gelesen).

Gruss Reinhard

Ich habe jetzt selber noch ein Link gefunden der einige schöne Beispiel fpr den Umgang mit den Komponenten hat.
Hier: http://www.dsdt.info/tipps/?kat=21

Vorallem hier: http://www.dsdt.info/tipps/?id=289

Gruss jjep

procedure TForm1.Button1Click(Sender: TObject
begin
if (Sender as TButton).Name = ‚Button1‘ Then
begin
// mach was
end
else if (Sender as TButton).Name = ‚Button2‘ Then
begin
// mach was anderes
end;
end;

Das funktioniert, aber trotzdem noch eine Variante für alle, die es gerne so einfach wie möglich machen:

procedure TForm1.Button1Click(Sender: TObject
begin
 if (Sender=Button1) Then
 begin
 // mach was
 end
 else if (Sender=Button2) Then
 begin
 // mach was anderes
 end;
end;

Gruß
Martin

nicht ganz …
Hallo,

das hat nichts mit Schreibarbeit sparen zu tun und macht eben nicht das selbe.

(Sender as TButton).

ist ein so genannter „weicher“ Cast,

TButton(Sender).

ein „harter“.

Beim „weichen“ Cast wird vorher überprüft ob der Sender wirklich vom Typ TButton ist und wenn nicht, eine entsprechende Exception ausgelöst.
Beim „harten“ Cast wird dem Sender quasi der Typ TButton aufgedrückt.
Wäre aber Sender in diesem Fall nicht vom Typ TButton dann würde es zu Schutzverletzungen kommen.

Gruß
Frank

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]