!!!Eigene Funktionen gehen nicht!!!



  • Deforation schrieb:

    3. else if gibt es in C++ nicht. Nur in VBA

    else if gibt es sehr wohl bei C++, auch wenn es kein einzelnes Schlüsselwort ist:

    if(a==1)
      foo1();
    else if(a==2)
      foo2();
    else
      foo3();
    

    Dies ist legal, und macht auch das was man erwartet. Es ist nichts anderes wie die folgende Verschachtelung:

    if(a==1)
      foo1();
    else
    {
      if(a==2)
        foo2();
      else
        foo3();
    }
    

    cu André



  • Jop stimmt ja. 👍

    Wass hab ich mir dabei bloss gedacht. 😃



  • Jo danke hast mir echt geholfen...und zu dem else if...hab natürlich den Code davor getestet...

    mfg Dimo



  • Noch ein kleiner Tipp.

    Du kannst das Ganze noch ein bisschen verkleinern.

    Quellcode ca. 9-mal so groß ist wie mit Funktionen

    Anstelle, dass du für jeden Butten die Funktion Like this machst.

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
         wachsel();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
         wachsel();
    }
    //---------------------------------------------------------------------------
    

    Kannst du auch auf dem Formular auf den Button klicken, dann auf Ereignisse und dann kannst im OnClick Ereigniss das Ereigniss des ersten Buttons wählen.

    Und schon hast du wieder 18 Zeilen gesparrt 😃

    Dann steht beim OnClick Ereigniss des Buttons2 quasi (Button1Click) und beim dritten und vierten auch. 💡



  • Jo klar die idee ist gut nur will ich damit ja ein TicTacToe Programmieren und dann muss ich die Captions von den Button ändern...und so würde egal auf welchen Button ich klicke immer das von Button 1 geändert werden...ich könnt mir vorstellen das man des irgendwie vielciht mit Arrays machen könnte aber das zu testen hab ich keinen Bock und find ichs so au ok...aber trozdem danke

    mfg Dimo



  • Hallo,

    im OnClick des Button existiert der Parameter "Sender" (TObject *Sender) ... mittels dynamic_cast könntest du dann ermitteln welchen der vielen Buttons gedrückt wurde.

    Somit kannst du es dann doch, wie Deforation vorgschlagen hat, verkürzen.

    dynamic_cast(Sender *)<TButton>->Caption = "X";
    

    mfg, Micha



  • eher so:

    dynamic_cast<TButton*>(Sender)->Caption = "X";
    


  • Hallo,

    sry, Linnea hat natürlich recht 🙂

    mfg, Micha



  • Es wäre noch gut den Rückgabewert von dynamic_cast zu testen wenn man es denn schon verwendet.
    Wenn man sich völlig sicher ist, das Sender ein TButton ist, kann man sonst ja auch static_cast verwenden.



  • Linnea schrieb:

    eher so:

    dynamic_cast<TButton*>(Sender)->Caption = "X";
    

    Noch eher so:

    dynamic_cast <TButton&> (*Sender).Caption = "X";
    

    dynamic_cast mit Referenzen wirft std::bad_cast, wenn der Cast fehlschlägt, sorgt also für die von Braunstein angeregte Überprüfung.


Anmelden zum Antworten