Newsgroup: it.comp.programmare.win32
Titolo: BCB3 Sender?

void __fastcall TForm1::Button1Click(TObject *Sender)
E' possibile da Sender risalire al componente cha ha chiamato la funzione?
Ovvero, se ho dieci bottoni che all'evento OnCLick chiamano tutti la
funzione Button1Click
posso sapere (da dentro Button1Click) quale bottone l'ha richiamata, il nome
o il tag?
Grazie

 wrote in message 8kd38j$33q$1...@nslave2.tin.it...

Ciao,
la funzione che segue mi è servita per far apparire in una textbox
(txtProg1..4) il nome di un file selezionato premendo un pulsante
a fianco della texbox (btnSel1..4), in base al pulsante premuto si
aggiorna la textbox corrispondente. E' ovvio che i pulsanti btnSel1..4
avranno tutti questa funzione come evento OnClick.
void __fastcall TfrmConfigura::btnSelClick(TObject *Sender)
{
  String sT;
  if (fodSelProg->Execute()) {
    sT = fodSelProg->FileName;
    if ((TButton*)Sender == btnSel1) txtProg1->Text = sT;
    else
      if ((TButton*)Sender == btnSel2) txtProg2->Text = sT;
      else
        if ((TButton*)Sender == btnSel3) txtProg3->Text = sT;
        else
          if ((TButton*)Sender == btnSel4) txtProg4->Text = sT;
  }
}
Spero di esserti stato utile.
Gianluca.


Sei stato utilissimo, era proprio quello che cercavo, e soprattutto
rapidissimo! :)
Grazie.

 o il tag?
Certo, nel caso del Tag (ma puoi anche assegnare proprietą come Text,
Caption, Color, ecc)
sempre riferendoci al caso di un bottone:
    QualcosaConTag->Tag = dynamic_cast<TButton*>(Sender)->Tag;
da mettere in ogni evento OnClik dei bottoni che ti interessano. Ad ogni
Click
automaticamente l'oggetto QualcosaConTag riceverą il valore del Tag del
bottone
premuto.
Il Biondo
P.S:
    La prossima volta posta su it.comp.programmare.win32  : ))

 Click
Scusami:
da mettere nell'UNICO evento OnClick e assegnarlo a tutti i bottoni che ti
interessano.
Il Biondo

Scusa per il Ps è il mio server di news che sta male....


Io ho fatto come nell'esempio di Gianluca_dm: Qualcosa =
((TButton*)Sender)->Caption e funziona, è sbagliato?. Cosa fa dynamic_cast?

 ((TButton*)Sender)->Caption e funziona, è sbagliato?. Cosa fa
dynamic_cast?
dynamic_cast<T>(ptr)  effettua un cast sicuro a run time del puntatore
Sender, se la conversione fallisce solleva
un'eccezione, alternativamente puoi usare static_cast se sei sicuro
dell'identità di Sender.
(TButton*)Sender è un cast C-Style.
In the expression, dynamic_cast< T > (ptr), T must be a pointer or a
reference to a defined class type or void
*. The argument ptr must be an expression that resolves to a pointer or
reference.
If T is void* then ptr must also be a pointer. In this case, the resulting
pointer can access any element of the class that is the most derived element
in the hierarchy. Such a class cannot be a base for any other class.
Conversions from a derived class to a base class, or from one derived class
to another, are as follows: if T is a pointer and ptr is a pointer to a
non-base class that is an element of a class hierarchy, the result is a
pointer to the unique subclass. References are treated similarly. If T is a
reference and ptr is a reference to a non-base class, the result is a
reference to the unique subclass.
A conversion from a base class to a derived class can be performed only if
the base is a polymorphic type.
The conversion to a base class is resolved at compile time. A conversion
from a base class to a derived class, or a conversion across a hierarchy is
resolved at runtime.
If successful, dynamic_cast< T > (ptr) converts ptr to the desired type. If
a pointer cast fails, the returned pointer is valued 0. If a cast to a
reference type fails, the Bad_cast exception is thrown.
Note: Runtime type identification (RTTI) is required for dynamic_cast.