Funktion abbrechen



  • Hallo,

    ich hoffe ich kann mein Problem hierdurch verdeutlichen:

    void __fastcall Tfrm_Main::cb_REALClick(TObject *Sender)
    {
      if (MessageDlg("Diese Option wirklich aktivieren?",mtInformation,TMsgDlgButtons()<<mbYes<<mbNo,0)==mrYes)
      { /*...Tu irgendwas...*/ } else { /*...Funktion abbrechen - Checkbox soll alten Wert (true/false) behalten...*/ }
    }
    

    Wenn eine Checkbox angeklickt wird, soll eine Abfrage erscheinen, ob diese Option wirklich aktiviert werden soll. Wählt man JA, so gehts im Programm normal weiter. Wählt man NEIN, so soll die Funktion abgebrochen werden, d.h. der Wert der Checkbox soll sich nicht ändern. War die Checkbox also gecheckt, soll sie es bleiben und umgekehrt.

    Kann mir da jemand helfen? Die Suche nach entsprechenden Themen hat nichts ergeben (vielleicht weiß ich auch nicht, wonach ich suchen muss).

    Gruß,
    Bo

    [ Dieser Beitrag wurde am 14.06.2003 um 23:53 Uhr von Bomania editiert. ]



  • hallo,

    wenn ichs richtig verstanden hab, mußt du dir nur den wert der checkbox merken, bevor was gemacht wird:

    void __fastcall Tfrm_Main::cb_REALClick(TObject *Sender)
    {
      bool chkState = CheckBox1->Checked;
      if (MessageDlg("Diese Option wirklich aktivieren?",mtInformation,TMsgDlgButtons()<<mbYes<<mbNo,0)==mrYes)
      { /*...Tu irgendwas...*/ } 
    else 
      CheckBox1->Checked = chkState;
    }
    

    mfg

    murph



  • Hi,

    sorry is nicht richtig rübergekommen, aber die Funktion um die es hier geht ist von der besagten Checkbox selbst (cb_REAL). Das Problem ist ja, dass die letzte Zeile die selbe Funktion erneut aufruft und dann auch wieder die Abfrage kommt. Ich hab das schon mit einer globalen Bool-Variable versucht mit zick verschiedenen Abfragen etc.

    Deshalb hatte ich gehofft es gibt soetwas wie exit sub unter VB.

    Gruß,
    Bo



  • was ist mit break und return ?



  • Break ist an dieser stelle unzulässig. Und Return bringt an dieser Stelle leider auch nichts. Trotzdem danke.



  • return bring die ne Menge.

    du hast es nur nicht ausprobiert....

    void test(int t)
    {
    if(t==5) return;
    ShowMessage(IntToStr(t));
    }
    


  • Danke ich werds damit mal probieren.



  • Beim OnClick-Event der CheckBox bringt return in der Tat nichts, da sich der "CheckState" schon vorher geändert hat. Was Bomania bräuchte wäre ein OnBeforeClick-Event, um die Änderung des CheckStates abfangen zu können.

    Eventuell hilft es ja, die entsprechende Windows-Message abzufangen, ich wüsste allerdings nicht, welche Message das sein soll.

    Letzendlich stellt sich aber die Frage: wozu das Ganze? Nach den üblichen GUI-Richtlinien werden CheckBoxen zum Wählen von Optionen und Einstellungen verwendet, nicht zum Starten von Programmroutinen. Es sollte also eigentlich kein Bedarf für eine "Abbrechen"-Option bestehen.



  • Beim Klick auf die Checkbox soll eine Abfrage-Meldung ausgegeben werden, in der der Benutzer gefragt wird, ob er die Option wirklich de-/aktivieren möchte da das Auswirkungen auf das Programm haben kann. Der Benutzer soll das ganze abbrechen lassen können.



  • Bei einer gut designten Oberfläche sollte das An/Abwählen einer CheckBox keine unmittelbaren Auswirkungen auf den Programmablauf haben. Zumindest keine, die so schwerwiegend sind, dass sie eine "Sicherheitsabfrage" nötig machen.


Anmelden zum Antworten