Avatar billede morten_s Nybegynder
19. juni 2001 - 09:29 Der er 1 kommentar og
2 løsninger

Sender as

Jeg har en MainForm hvorpå der er placeret en PageControl, med et antal sider (Tabs).

På hver Tabs er der placeret en Frame for at få delt koden ud i nogle under units (Frames) afht. mit overblik over programmeringen.

Når der klikkes på TabSheet1 på MainFormen vil jeg gerne have afviklet noget kode i den Frame som hører til, for at løse dette har jeg brugt eventet OnShow til at kalde eventet OnEnter på den tilforordnede Frame på følgende måde:

procedure TMainForm.TabSheet1Show(Sender: TObject);
begin
  Frame1.FrameEnter(Sender);
end;


og i Frame1 har jeg så følgegende kode:

procedure TFrame1.FrameEnter(Sender: TObject);
begin
  //Koden for det som skal gøres
end;

mit problem er nu at hvergang der klikkes med musen osv. på den pågældende frame så afvikles hele koden, hvilket jeg ikke er interesseret i.
Det bedste havde selvfølgelig været hvis der fandtes et OnShow evetn til den pågældende Frame og mit spørgsmål går derfor på om det er muligt at oprette et sådant event, noget arv eller lignede ?


En anden mulighed er vel at tjekke på hvem der er sender, det har jeg forsøgt med følgende kode

procedure TFrame1.FrameEnter(Sender: TObject);
begin
  if Sender as MainForm.TabSheet1Show then
  begin
    // Koden for det som skal gøres
  end;
end;

Hvilket desværre ikke kan compileres
(giver fejlen Not enough actual parameters)

Så har jeg prøvet at ændre til
  if Sender as MainForm.TabSheet1Show(Sender) then
(giver fejlen operator not applicabel to this operand type)

Håber nogen har en god ide, til ovenstående

Avatar billede borrisholt Novice
19. juni 2001 - 09:34 #1
Du er inde på noget af  det rigtige : At chekke hvem sender er : Men du skal gøre det sådan her :

procedure TFrame1.FrameEnter(Sender: TObject);
var
  TabSheet : TTabSheet;
begin
  if (Sender is TTabSheet) then
  begin
  TabSheet :=  (Sender as TTabSheet);
  //Så skal du bare finde ud af hvad det er for er TabSheet du har fat i :
  if TabSheet =  MainForm.TabSheet1 then ....
// Koden for det som skal gøres
  if TabSheet =  MainForm.TabSheet2 then ....
// Koden for det som skal gøres
  if TabSheet =  MainForm.TabSheet3 then ....
// Koden for det som skal gøres
 
  end;
end;

Jens B
Avatar billede morten_s Nybegynder
19. juni 2001 - 09:43 #2


Sender is og as, ja ja mange tak for hjælpen (jeg havde da en ide om det, det går fremad).

Men jeg venter lige lidt med pointene, hvis nu nogen skulle have en ide til at oprette et onShow event i min frame
Avatar billede martinlind Nybegynder
19. juni 2001 - 09:47 #3
Jeg ville nok bare lave en public procedure på min frame og så kalde den.

TFrame = class
...
procedure TFrame1.DoFirstTime;
begin
  //Koden for det som skal gøres
end;

----------------------
procedure TMainForm.TabSheet1Show(Sender: TObject);
begin
  Frame1.DoFirstTime;
end;

/Martin
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