Windows Taschenrechner nachbauen^^



  • Hallo, ich versuche gerade ein Teil vom Windows Taschenrechner nachzubauen.

    Ich habe 1 Edit Feld

    2 Buttons in Button 1 ist steht eine 1 für die Zahl 1 und in Button 2 halt eine 2 für die Zahl 2.

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Form1->Edit1->Text="1";
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    
    Form1->Edit1->Text="2";
    }
    

    Aber wenn ich jetzt z.b. den ersten Button anklicke dann kommt zwar die 1 aber wenn ich dann wieder den 2 Button anklicke wird ja logischer weise meine 1 mit der 2 Überschrieben -.-

    Hat da wer eine ahnung wie man das Problem lösen könnte?



  • += ?



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum VCL (C++ Builder) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo

    Der +=Operator wätre die naheliegende Wahl, ist aber bei den VCL-Eigenschaften nicht brauchtbar. D.h. du must die lange Form verwenden :

    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      Edit1->Text = Edit1->Text + "2";
    }
    

    Das "Form1->" brauchst du bei Methoden der TForm1-Klasse selber nicht, es kann sogar schädlich sein.

    bis bald
    akari



  • akari schrieb:

    Der +=Operator wätre die naheliegende Wahl, ist aber bei den VCL-Eigenschaften nicht brauchtbar. [...]
    Das "Form1->" [...] kann sogar schädlich sein.

    Meinst du mit dem 1. Satz, das man so die Komponenteneigenschaften nicht verändern sollte? Aber zum reinen Rechnen ist += brauchbar, oder? Benutze das nämlich ständig...

    Ja, und ich schließe mich meinem Vorfrager an, wie kann das "Form1->" schädliche Auswirkungen haben?



  • += funktioniert nur bei den __property nicht, da dahinter Funktionen stecken und somit Operationen nur auf temporäre Werte durchgeführt werden. zB Edit1->Text += "Test" funktioniert nicht, weil die Eigenschaft Text über eine Read- und eine Write-Funkion verfügt. Somit wird bei der Verwendung von += das Wort Test nicht an Edit->Text angehängt, sondern an ein temporäre Variable, die von der Read-Funkion zurückgegeben wird. Dies ist eine Eigenart der VCL-Komponenten. Bei den Standarddatentypen stellt das kein Problem dar.

    Die Verwendung von Form1-> innerhabl der Form kann deswegen zur Problemen führen, weil Form1 ein globaler Zeiger aus der TApplication-Instanz ist. Sobald man jetzt manuell eine Instanz der Form erzeugt, greift man über Form1 aber auf den globalen Zeiger und nicht auf die manuell erzeugte Instanz. Brauchen tut man es eh nicht, wenn man aber der Bequemlichkeit halber nicht darauf verzichten möchte, sollte man this-> verwenden.



  • Hallo

    Kolumbus schrieb:

    akari schrieb:

    Der +=Operator wätre die naheliegende Wahl, ist aber bei den VCL-Eigenschaften nicht brauchtbar. [...]
    Das "Form1->" [...] kann sogar schädlich sein.

    Meinst du mit dem 1. Satz, das man so die Komponenteneigenschaften nicht verändern sollte? Aber zum reinen Rechnen ist += brauchbar, oder? Benutze das nämlich ständig...

    Für normale Variablen ist += in Ordnung. Für VCL-Properties (alles was mit dem Schlüsselwort __property deklariert wird) ist += nicht anwendbar. Fatalerweise wird der Code compilieren, aber eben keine Auswirkungen haben.

    Ja, und ich schließe mich meinem Vorfrager an, wie kann das "Form1->" schädliche Auswirkungen haben?

    "Form1->" bindet die Anweisung über den globalen Pointer Form1 an genau eine Forminstanz. Das erfordert zunächst einmal das hinter Form1 auch wirklich eine gültige Instanz steht, was nicht immer der Fall sein muß. Des weiteren ist es ja durchaus möglich mehrere dynamische Instanzen einer Formklasse anzulegen, wo dann aber jeder feste Verweis auf eine einzelne Instanz stört.

    Wenn ihr unbedingt die Codevervollständigung wollt dann verwendet wenigstens "this->", damit werden alle diese Probleme umgangen.

    /Edit : Ach nö... zu langsam.

    bis bald
    akari



  • Vielen Dank für die Erklärung ihr beiden! 🙂



  • Hallo

    Weitere Diskussion um Form1-> und this-> nach dort geteilt.

    bis bald
    akari


Anmelden zum Antworten