2017-08-19 6 views
0

Je souhaite créer une procédure qui définira sa propre propriété. Veuillez vous référer à l'exemple de code. J'utilise DELPHI XEComment appeler un composant à son auto-événement - DELPHI

échantillon:

procedure TCarcassUpdateForm.ChangeText; 
    begin 
     if self.Text = '' then 
     begin 
     Self.Text := '0'; 
     end; 
    end; 

//Edit 14 
procedure TCarcassUpdateForm.MyDBLabeledEdit14Exit(Sender: TObject); 
    begin 
    ChangeText 
    end; 

//Edit 15 
procedure TCarcassUpdateForm.MyDBLabeledEdit15Exit(Sender: TObject); 
    begin 
    ChangeText 
    end; 

Répondre

1

Votre approche me fait peu de sens. Si je comprends ce que vous essayez de faire, voici ce que vous devriez faire à la place:

  • Cliquez sur l'une des commandes (appelons-le DBEdit1 pour le rendre facile).
  • Basculez vers l'onglet Événements de l'inspecteur d'objets et double-cliquez sur l'événement OnExit.
  • Dans l'éditeur de code, vous verrez

    procedure TCarcassUpdateForm.DBEdit1Exit(Sender: TObject); 
    begin 
    
    end; 
    
  • Modifier ce code pour:

    procedure TCarcassUpdateForm.DBEdit1Exit(Sender: TObject); 
    var 
        Edit: TDBEdit; // replace with your actual control class 
    begin 
        // Replace TDBEdit with the your actual control class 
        Edit := (Sender as TDBEdit); 
        if Edit.Text = '' then 
        Edit.Text := '0'; 
    end; 
    
  • Retour à l'inspecteur d'objets et de changer le nom de l'événement OnExit de DBEdit1Exit à AllDBEditExit.

  • Dans le Concepteur de formulaire, Ctrl +LeftClick chacun des contrôles que vous voulez avoir le même comportement pour les sélectionner.
  • Dans l'onglet Événements de l'inspecteur d'objets, cliquez sur la liste déroulante de l'événement OnExit et choisissez AllDBEditExit comme nom d'événement.
+2

Je suggère de peaufiner le gestionnaire 'OnExit' pour ne pas appeler l'opérateur' as 'plusieurs fois, car cela va effectuer une recherche redondante à l'exécution. Appelez-le une fois et enregistrez le résultat dans une variable locale, par exemple: 'procedure TCarcassUpdateForm.AllDBEditExit (Sender: TObject); var Edit: TDBEdit; begin Edit: = Expéditeur comme TDBEdit; si Edit.Text = '' alors Edit.Text: = '0'; fin; ' –