Dynamic_cast Fehler



  • Hi,

    habe ein Problem mit dynamic_cast und finde den Fehler nicht.
    Folgenden Fehler tritt auf: "A control cannot have it self as it's parent"

    Hier mein Code:

    Erstellen der Panel's

    // Reihe 1
        for (int i = 0; i < x; i++)
        {
            Feld1[i] = new TPanel(this);
            Feld1[i]->Parent = Spielfeld;
            Feld1[i]->Width = 41;
            Feld1[i]->Height = 41;
            Feld1[i]->Top = 24 + i * 41;
            Feld1[i]->Left = 24;
            Feld1[i]->OnClick=PanelClick;
            Feld1[i]->BevelInner = bvLowered;
            Feld1[i]->Show();
        }// for
    

    OnClick vom Panel ausführen

    void __fastcall TfrmMain::PanelClick(TObject *Sender)
    {
        for(int i=0; i < ComponentCount; i++)
        {
            if(Components[i]->ClassNameIs("TPanel"))
            {
                if(dynamic_cast<TPanel*>(Components[i])->OnClick)
                {
                    if(dynamic_cast<TPanel*>(Components[i])->Tag == 0)
                    {
                        dynamic_cast<TPanel*>(Components[i])->Tag = 1;
                        Stein = new TShape(Feld1[i]);
                        Stein->Parent = Feld1[i];
                        Stein->Shape = stCircle;
                        Stein->Align = alClient;
                    }
                    else
                    {
                        ShowMessage ("Feld ist schon belegt!");
                    }// ifelse
                }// if
            }// if
        }// for
    }
    

    Sorry für die wenig aussage kräftige Überschrift, mir ist keine eingefallen.

    MFG

    Toadie



  • Hi,
    du kannst den Sender verwenden
    ohne auf Richtigkeit zu prüfen:

    void __fastcall TfrmMain::PanelClick(TObject *Sender)
    {
       TPanel* temp=dynamic_cast<TPanel*>(Sender);
       if(temp && temp->Tag == 0)
                    {
                        temp->Tag=1;//dynamic_cast<TPanel*>(Components[i])->Tag = 1;
                        Stein = new TShape(Feld1[i]);
                        Stein->Parent = Feld1[i];
                        Stein->Shape = stCircle;
                        Stein->Align = alClient;
                    }
                    else
                    {
                        ShowMessage ("Feld ist schon belegt!");
                    }
    }
    

    weiteres finest du in der FAQ

    [ Dieser Beitrag wurde am 14.01.2003 um 15:36 Uhr von AndreasW editiert. ]



  • Danke das würde auch gehn aber leider wird das erzeugte Shape nicht dort plaziert wo es hin soll 😕



  • Original erstellt von Toadie:
    Danke das würde auch gehn aber leider wird das erzeugte Shape nicht dort plaziert wo es hin soll 😕

    Dann setz es dahin, wo es hin soll. *kopfschüttel* Und schau dir mal das "i" an in Andreas' Beitrag sowie auch bei dir. Das kann in beiden Fällen doch so nicht stimmen, oder?

    [ Dieser Beitrag wurde am 14.01.2003 um 17:42 Uhr von WebFritzi editiert. ]



  • [QB]Und schau dir mal das "i" an in Andreas' Beitrag sowie auch bei dir. Das kann in beiden Fällen doch so nicht stimmen, oder?[QB]

    nö, aber ich hab ja auch geschrieben, das ich das nicht getestet habe. Ich hab lediglich eine Ansatz ins Fenster geschrieben, der so, wie er dort steht, natürlich nihct funktioniert. Solte ja auch nur ein Ansatz sein und ein Beispiel, wie man mit den Sender arbeitet.


Anmelden zum Antworten