![]() |
Problem bei der Bestimmung der Komponente durch Var Sender
Hallo alle miteinander,
ich habe folgende Situation: Ich erzeuge mit LabelLoeschen[1]:=TLabel.create(self); zur Laufzeit neue Labels. LabelLoeschen ist definiert als LabelLoeschen: array[1..50] of TLabel; Es ist nicht bekannt, ob tatsächlich 50 Labels erzeugt wurden; es können auch nur bspw. 6 erzeugt werden. Soweit funktioniert noch alles wunderbar. Ich weise den Labels jeweils noch das Ereignis onClick auf die Prozedur LabelLoeschenClick zu (LabelLoeschen[iPos].onClick:=LabelLoeschenClick ). Nun will ich in der Prozedur LabelLoeschenClick über die Variable Sender herausfinden, auf welches Label geklickt wird. Nachstehendes funktioniert bei mir nicht.
Delphi-Quellcode:
Ich bekomme keine Fehlermeldung. Ich habe mit einem Hatlepunkt auch ausprobiert, ob diese Prozedur auch aufgerufen wird. Dem ist so. Könnt Ihr mir helfen?
procedure TFRVersion.LabelLoeschenClick(Sender: TOBject);
var i:integer; begin for i:=1 to length(Labelfelder) do begin if Sender=Labelfelder[i] then begin ShowMessage('ja'); end; end; end; Besten Dank Ulrich [EDIT=Luckie]Code-Tags hinzugefügt. Bitte das nächste Mal selber machen. Danke.[/EDIT] |
als was is den Labelfelder definiert?
|
Ups, vergessen zu erwähnen
Labelfelder ist auch ein Array wie LabelLoeschen:
LabelFelder: array[1..50] of TLabel; Ulrich |
Versuch vielleicht mal einen Typecast des Senders:
Delphi-Quellcode:
procedure TFRVersion.LabelLoeschenClick(Sender: TOBject);
var i:integer; begin for i:=1 to length(Labelfelder) do begin if TLabel(Sender) = Labelfelder[i] then begin ShowMessage('ja'); end; end; end; |
Ich würde es so machen:
Delphi-Quellcode:
procedure TForm1.myLabelClick(Sender: TObject);
begin if Sender is TLabel then begin case (Sender as TLabel).Tag of 0: ShowMessage(IntToStr((Sender as TLabel).Tag)); 1: ShowMessage(IntToStr((Sender as TLabel).Tag)); 2: ShowMessage(IntToStr((Sender as TLabel).Tag)); end; end; end; procedure TForm1.FormCreate(Sender: TObject); var myLabelArray: array of TLabel; i : Integer; begin setlength(myLabelArray, 3); for i := 0 to 2 do begin myLabelArray[i] := TLabel.Create(self); myLabelArray[i].Parent := Form1; myLabelArray[i].Left := 20; myLabelArray[i].Top := 20*i+1; myLabelArray[i].Caption := IntToStr(i); myLabelArray[i].OnClick := myLabelClick; myLabelArray[i].Tag := i; end; end; |
Das ging aber fix!!
Hallo,
ich habe gleich mal eure Vorschläge ausprobiert. Chewies Vorschlag hat mir nicht weiter geholfen. Trotzdem danke. Vielleicht kann ich es aber noch gebrauchen. Ich habe gleich Deinen Vorschlag Luckie ausprobiert und der funktioniert perfekt. Recht herzlichen dnak für die schnelle Hilfe und kompetente Hilfe. Ulrich |
Re: Problem bei der Bestimmung der Komponente durch Var Send
Hai Ustra,
willkomen im Forum. Verwende doch einfach das Tag-Propertie:
Delphi-Quellcode:
procedure TForm1.LabelClick (Sender: TObject);
begin ShowMessage ('Es wurde auf ' + IntToStr ((Sender AS TLabel).Tag) + ' gelickt'); end; procedure TForm1.FormCreate(Sender: TObject); var i : integer; begin for i := 1 to length(Labelfelder) do begin LabelFelder[i] := TLabel.create(self); With LabelFelder [i] do begin Tag := i; Caption := 'Label-' + IntToStr (i); Top := 15 * i; left := 20; Parent := Form1; OnClick := LabelClick; end; end; end; [Edit] Grummel.... Luckie war wieder schneller [/Edit] |
Re: Problem bei der Bestimmung der Komponente durch Var Send
Zitat:
|
Re: Problem bei der Bestimmung der Komponente durch Var Send
Zitat:
Und da hatte ich vergessen auf "Absenden" zu klicken. |
Da sind kleine "Luckies" eben im Vorteil.
Aber jetzt Schluß, wird zu sehr off-topic. Aber es ist ja schon alles geklärt, wie es aussieht, sollte also nicht so schlimm sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 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