Button - zwei verschiedene Funktionen!



  • Hallo,

    wie kann ich ein Button "machen", der zwei verschiedene Funktionen ausführt z.B. wenn ich einmal auf diesen Button drücke passiert "das" und wenn ich noch mal auf den selben Button drücke passiert was ganz anderes... Also ich hab folgendes vor: Ich will ein Button erstellen, dass wenn man auf ihn drückt eine Komponente unsichtbar macht und wenn ich noch mal auf ihn drücke wieder sichtbar macht... wie könnte ich das machen ?

    void __fastcall TForm1::Mode11Click(TObject *Sender)
    {
     AggressivButton->Visible = false;
     AggressiverButton->Visible = false;
     AmAggressivstenButton->Visible = false;
    }
    

    (Mode11 ist der Button
    Aggressiv usw sind die Komponenten)

    Jetzt werden die Komponenten zwar unsichtbar aber nicht mehr sichtbar!

    MFG



  • Button->Visible = !Button->Visible;
    


  • Hey,

    danke für die schnelle Antwort - es funktioniert!

    Aber warum funtz das hier nicht ?

    AggressivButton->Visible = false; AggressivButton->Visible;
     AggressiverButton->Visible = false; AggressiverButton->Visible;
     AmAggressivstenButton->Visible = false; AmAggressivstenButton->Visible;
    

    MFG



  • Hallo,

    wie kann ich ein Button "machen", der zwei verschiedene Funktionen ausführt z.B. wenn ich einmal auf diesen Button drücke passiert "das" und wenn ich noch mal auf den selben Button drücke passiert was ganz anderes...

    Mehrere verschiedene Buttons auf ein- und derselben Position umschalten nur um zwei verschiedene Methoden aufzurufen ist schlechter Stil. Benutzt eine Membervariable des Forms um den Status des Buttons zwischenzuspeichern und werte diesen bei jedem OnClick-Event aus. Du kannst sogar die Tag-Eigenschaft des Buttons dafür benutzen.

    Aber warum funtz das hier nicht ?

    Was "funzt" den daran nicht 🙄 ? Was soll den deiner Meinung nach passieren?
    Speziell was versprichst du dir von dieser Anweisung?

    AggressivButton->Visible;
    

    bis bald
    akari



  • Hallo,

    Das die Komponenten wieder sichtbar werden, wenn ich das zweite mal drauf klicke!

    MFG



  • Hallo

    1. Du setzt bei allen Buttons Visible auf false
    2. Du führst eine Anweisung aus ("AggressivButton->Visible;") die gar nichts macht.
    3. Es ist nirgendwo eine Bedingung zu sehen, die etwas mit "zweitem Aufruf" zu tun hat.
    Warum sollte da irgendein Button irgendwann sein Visible auf true setzen?

    Wie ich schon sagte. verrenn dich nicht in die Visible-Eigenschaft. Benutzt eine nichtlokale Variable um den Zustand eines Buttons zwischenzuspeichern.

    bis bald
    akari



  • Numr mal so nachgehakt was ist denn an der version von audacia schlechter als extra einen puffer zudefinieren ? Ich finde den Weg optimal. :p



  • Hallo

    Also ich würde die Version des Buttons-Austauschen nicht audacia in die Schuhe schieben 😉

    Zum einen ist es unnötige GUI-Veränderung. Es soll ja nur die hinter dem Button liegende Funktion ausgetauscht werden, nicht aber der Button selber. Mach das in einer komplexen GUI mitsamt selbstarrangierenden Controls (Contraints...) und du bekommst eine tolle hin- und herzuckende GUI.

    Desweiteren ist das ein Mehraufwand an manueller Arbeit und Pflege. Stell dir vor du müßtest mit einem Button 10 verschiedene Statis durchschalten. Mit der Methode müßtest du also 10 verschiedene Buttons immer manuell auswechseln... viel Spaß wenn dann noch ein elfter dazukommen soll.

    bis bald
    akari


Anmelden zum Antworten