Avatar billede ellgaard Nybegynder
08. januar 2007 - 08:04 Der er 2 kommentarer og
1 løsning

Udlede metodenavn ud fra sender object

Hej

Jeg har en række knapper navngivet "knap1","knap2" osv. På alle knapper er angivet onClick proceduren "Click", som pt. ser således ud:

procedure click(sender:Tobject);
begin
if sender=knap1 then object1.doSomething;
if sender=knap2 then object2.doSomething;
...
end;

Kan man udlede objectet (navngivet med samme nummer som knappen) af sender. Jeg forestiller mig noget i retning af:

procedure click(sender:tobject);
begin
object(copy(sender.name,5,maxint).doSomething;

...men jeg kan ikke få det til at virke.
Avatar billede hrc Mester
10. januar 2007 - 09:48 #1
Ja da. Du bruger bare "as" operatoren og tag-property'en (der vist kom på i TWinControl) Den alminligste metode er at sætte tag = nummeret:

  case ((Sender as TEdit).Tag of
    0 : Object.DoSomething0;
    1 : Object.DoSomething1;
    2 : Object.DoSomething2;
  end;

og det vil virke fint hos dig. Men det er typisk et tegn på at man ikke har lavet det rigtigt. Med objektorientering skulle det ikke være nødvendigt.

Du kunne også lave dine DoSomething's om til formatet TNotifyEvent:

  procedure TMyObject.DoSomething(Sender : TObject);

og så tilknytte dem direkte til knappens OnClick via din forms OnCreate:

  btnKnap0.OnClick := Object.DoSomething0;
  btnKnap1.OnClick := Object.DoSomething1;
  btnKnap2.OnClick := Object.DoSomething2;
Avatar billede ellgaard Nybegynder
11. januar 2007 - 14:41 #2
Jeg har fået tag til at virke på følgende måde:

TMitobject(TButton(Sender).Tag).doSomething;
Avatar billede hrc Mester
12. januar 2007 - 09:30 #3
Så du smækker et objekt hen over Tag'et.

Jeg prøver altid at undgå at typecaste et objekt til en integer eller lignende. Det er risikabel kodning og tit grund til underlige fejl.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester