Button mehrere Befehle behandeln



  • Hallo zusammen,
    folgendes: Ich klicke einen Button an, in dem folgendes ablaufen soll:
    1. soll geschaut werden, ob ein Gerät vorhanden ist (welches spielt hier keine Rolle). Wenn jedoch kein Gerät angeschlossen ist kommt Fehlermeldung A

    Wenn ein Gerät angeschlossen ist geht es weiter zu 2.

    2. soll eine Datenpipeline aufgebaut werden. Schlägt dies fehl, kommt Fehlermeldung B

    Wenn nicht, 3.

    3. Datenübertragung, schlägt dies fehl, folgt Fehlermeldung C

    ENDE

    Wenn nun kein Gerät angeschlossen ist und ich den Button klicke kommen nun alle Fehlermeldungen A B und C. Kommen soll aber nur A. Das ganze läuft in if, else is, else Zweigen ab. Wie kann ich nun verhindern, dass, wenn Fehlermeldung A gekommen es, das Programm nicht weiter in die anderen else Zweige läuft? Könnte es mit exit funktionieren?

    Danke für eure Hilfe

    lg,
    blitzgeist



  • Hallo,

    du könntest entweder den if / else if / else - Zweig umbauen ( Quasi verschachteln), oder alles in Funktionen auslagern.

    // Das ganze mal in Pseudocode
    (if) Wenn Gerät vorhanden dann 
    { 
       (if) Wenn Datenstrom aufgebaut werden konnte dann
       {
           (if) Wenn Daten gesendet wurden dann
           {
               ShowMessage("geht");
           }
       }
    }
    (else) Wenn Gerät nicht vorhanden dann 
    { 
        ShowMessage("Kein Gerät vorhanden"); 
    }
    

    mfg, Micha



  • Hallo

    Wenn ich z.B. einen Button anklicke und in dem eine Funktion aufgerufen wird, diese Funktion keinen Rückgabewert hat und in dieser Funktion Memo1->Lines->Add("...") aufruft, findet er das Memo nicht. Klar ist wohl lokal, aber wie kann ich es realisieren, das Memo in der Funktion aufgerunfen wir? muss ich da lokal in dieser Funktion ein Memo1 anlegen? Wenn ja, wie, weil, es gibt ja eigendlich schon Memo1

    /Edit : sorry ungewolltes Editiren anstatt Neuer Beitrag



  • Wieso exit ?
    Wenn es an einer Stelle wirklich nicht mehr in der ButtonClick Methode weitergehen soll, ist return immer eine gute Möglichkeit zum Aussteigen.
    Ansonsten kommmt man natürlich mit einer richtig kontruierten if else Schleife eigentlich auch immer klar.



  • blitzgeist schrieb:

    Danke für die schnelle Antwor 🙂
    ICh denke ich werde es mit Verschachtelung versuchen. Aber noch eine Frage: Wenn ich z.B. einen Button anklicke und in dem eine Funktion aufgerufen wird, diese Funktion keinen Rückgabewert hat und in dieser Funktion Memo1->Lines->Add("...") aufruft, findet er das Memo nicht. Klar ist wohl lokal, aber wie kann ich es realisieren, das Memo in der Funktion aufgerunfen wir? muss ich da lokal in dieser Funktion ein Memo1 anlegen? Wenn ja, wie, weil, es gibt ja eigendlich schon Memo1

    lg
    blitzgeist

    hallo,

    Gib den Parent/Owner mit an ... Form1->Memo1->Lines->Add("...");

    mfg, Micha!



  • Hallo

    Aber noch eine Frage:

    Ein Thema ein Thread, ein Thread ein Thema. Bitte beim nächsten Mal einen neuen Thread aufmachen.

    Wenn ich z.B. einen Button anklicke und in dem eine Funktion aufgerufen wird, diese Funktion keinen Rückgabewert hat und in dieser Funktion Memo1->Lines->Add("...") aufruft, findet er das Memo nicht. Klar ist wohl lokal, aber wie kann ich es realisieren, das Memo in der Funktion aufgerunfen wir? muss ich da lokal in dieser Funktion ein Memo1 anlegen? Wenn ja, wie, weil, es gibt ja eigendlich schon Memo1

    Ich versteh dich so, das du eine eigene Funktion hast die ein Memo eines Forms verwenden soll. Da die Funktion aber kein Member des Forms ist kommt die Fehlermeldung das das Memo nicht bekannt ist.

    Es gibt zwei Möglichkeiten : Entweder du setzt die Funktion als Membermehtode des Forms ein. Dazu must du die Funktion so verändern

    void TForm1::MyFunc()
    {
      Memo1->Text = ...;
    }
    

    Und du must noch im Header des Forms die Definition der Methode hinzufügen

    ...
       private :
         void MyFunc();
       public :
    

    Oder läßt die Funktion selbstständig und übergibst der Funktion das Memo als Pointer

    void MyFunc(TMemo* Memo)
    {
      Memo->Text = ...;
    }
    // Aufruf aus einer Form-Methode heraus:
    MyFunc(Memo1);
    

    bis bald
    akari



  • Alles klar, ein Thema ein Thread, werde ich beachten 😃
    Danke für die Antworten, werde es gleich ausprobieren.



  • Hallo

    RandomAccess85 schrieb:

    Gib den Parent/Owner mit an ... Form1->Memo1->Lines->Add("...");

    Das halte ich für die schlechtere Lösung. Denn dadurch wird eine scheinbar selbstständige Funktion intern an eine konkrete Instanz eines Forms gebunden. Da ist es besser die Funktion zu einer Membermethode des Forms zu machen, und gleich richtig impliziet über this gehen.

    bis bald
    akari


Anmelden zum Antworten