8
votes

Comment identifier le type de Tobject pour l'expéditeur à Delphi?

Je crée un code pour une boîte de dialogue avec un groupe radio dans le cadre d'un formulaire de préférences. Une partie de notre code est que lorsque le formulaire de préférences est ouvert, le groupe radio est cliqué, ce qui configure une bande de choses (c.-à-d. Si le bouton radio est "OFF", une bande de configuration est cachée).

Qu'est-ce que je Vous voulez savoir lorsque l'utilisateur clique réellement sur le groupe de radio, par opposition à celui-ci lorsque la boîte de dialogue Préférences s'ouvre. P>

Donc, le code ressemble à ceci: P>

(open preferences)...
rgMyGroupClick(nil)

procedure  TdlgPreferences.rgMyGroupClick(Sender:TObject)

if sender <> nil then
begin
 //do something useful
end;


0 commentaires

3 Réponses :


10
votes

Si je vous comprends correctement, vous cliquez sur votre radiogroupe pour configurer l'état initial du formulaire, mais vous avez du code supplémentaire dans le gestionnaire de clic que vous ne voulez pas exécuter?

Si c'est le Case Vous voudrez peut-être envisager de supprimer le code qui définit l'état du formulaire à sa propre méthode, puis l'appelez à partir de l'événement de clic radio et à partir de la version initiale / Afficher / Création de votre formulaire.

De cette façon, vous pouvez utiliser le même code pour définir le formulaire sur votre état requis à partir d'un utilisateur clic et le définir de manière programmée sans faire de logique supplémentaire requis lorsqu'un utilisateur interagit avec la boîte de dialogue. Ou peut-être que j'ai complètement mal compris votre problème ...

quelque chose comme ceci: xxx


1 commentaires

Yup, un cas classique de refactoring.



19
votes

tester votre expéditeur strud>

Vous pouvez tester l'expéditeur de deux manières: p> xxx pré>

ou vous pouvez tester le type d'expéditeur. P>

procedure TdlgPreferences.rgMyGroupClick(Sender:TObject)
begin
  //TObject does not have a 'tag' property, but all TControls do...
  if (sender is TControl) and (TControl(Sender).Tag = 10) then ....


0 commentaires

4
votes

Essayez certaines fonctions ou propriétés, comme: xxx

Remarque: lors de l'utilisation de l'obj Sender du BoutonClick (expéditeur: Tabject) (par exemple) Sender = classe de bouton du clic => tbutton

donc, tbutton (expéditeur) .properties ou méthodes, etc.


0 commentaires