Sendername existiert nicht



  • Hallo,

    ich hab hier aus den FAQ gelesen, wie man den Sendernamen ermittelt. Dies funktioniert auch ganz gut, allerdings nicht bei Labels, die ich zur Laufzeit erzeuge. Hier mal der Code:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    TLabel *Testlabel[30];
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Label1Click(TObject *Sender)
    {
     Label1->Caption = dynamic_cast<TLabel*>(Sender)->Name;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormActivate(TObject *Sender)
    {
    for (int i=0; i<=10; i++)
    {
    Testlabel[i] = new TLabel(Form1);
    Testlabel[i]->Caption="Blabla";
    Testlabel[i]->Width = 50;
    Testlabel[i]->Left=20+i*50;
    Testlabel[i]->Transparent=true;
    Testlabel[i]->Top=5;
    Testlabel[i]->OnClick = Label1Click;
    Form1->InsertControl(Testlabel[i]);
    }
    }
    //---------------------------------------------------------------------------
    

    Hab leider keine Ahnung, wo der Fehler sein könnte.

    cu



  • Wahrscheinlich doch daran, dass du beim anlegen der Labels überhaupt keinen Namen vergibst. 😕 😕 Caption ist nicht der Name, wobei du diese natürlich abfragen könntest



  • Ist denn der Name nicht Testlabel[5] zum Beispiel?



  • Hallo

    nein, Testlabel[5] ist der Name des Array-Elements, das auf ein Label verweist. Den (eindeutigen) Namen des Controls must du selber festlegen, z.B. so

    Testlabel[i] = new TLabel(Form1);
    Testlabel[i]->Name="TestLabel" + IntToStr(i);
    Testlabel[i]->Caption="Blabla";
    ...
    

    bis bald
    akari



  • OK, danke für die schnelle Hilfe. Werd das gleich mal ausprobieren, wenn ich heim komme.

    Bye


Anmelden zum Antworten