Exception Handler und SetFocus



  • Hallo,
    ich möchte einen einfachen Taschenrechner mit den Grundfunktionen und 2 Eingabefeldern für Zahlen so erweitern, dass bei einer Falscheingabe:
    1. der falsch eingegebene Wert als Meldung angezeigt wird
    2. das Feld mit dem falschen Wert in den Focus gesetzt wird
    3. die Berechnung bei Falscheingabe nicht fortgesetzt wird

    Die Ausgabe der Fehlermeldung und das Setzen des Focus sollen dabei in einer Funktion oder Methode erfolgen.

    Programmiert wurden bisher die rechnen2.cpp und die rechnen2.h

    Hier die rechnen2.h :

    [cpp]
    
    //---------------------------------------------------------------------------
    
    #ifndef rechnen2H
    #define rechnen2H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
            TRadioGroup *RadioGroup1;
            TEdit *Edit1;
            TEdit *Edit2;
            TButton *Button1;
            TButton *Button2;
            TLabel *Label1;
            void __fastcall Button2Click(TObject *Sender);
            void __fastcall Button1Click(TObject *Sender);
    
    private:	// Anwender-Deklarationen
    public:		// Anwender-Deklarationen
            __fastcall TForm1(TComponent* Owner);
            void check (int zahl);
            int zahl1;
            int zahl2;
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    
    [/cpp]
    

    und hier die rechnen2.cpp

    [cpp]
    
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "rechnen2.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    Form1->Close();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int zahl1;
    int zahl2;
    double ergebnis;
    int flag=0;
    
    try {
    //Eingaben von Zeichenkette zu int umwandeln
    zahl1=StrToInt(Edit1->Text);
    zahl2=StrToInt(Edit2->Text);
    
            try {
            check (zahl1);
            ShowMessage ("Ihre Eingabe war: "+ IntToStr(zahl1));
            }
    
            catch(Exception& Fehler) {
            ShowMessage(Fehler.Message);
            }
    
            try {
            check (zahl2);
            ShowMessage ("Ihre Eingabe war: "+ IntToStr(zahl2));
            }
    
            catch(Exception& Fehler) {
            ShowMessage(Fehler.Message);
            }
    }
    catch(EConvertError&) {
            ShowMessage("Bei der Konvertierung ist ein Fehler aufgetreten!");
            }
    //Aktuelle Option auswerten und berechnen
    switch (RadioGroup1->ItemIndex)
            {
            case 0:
                    ergebnis=zahl1+zahl2;
                    break;
            case 1:
                    ergebnis=zahl1-zahl2;
                    break;
            case 2:
                    if(zahl2!=0)
                            ergebnis=(double) zahl1/zahl2;
                    else
                            flag=1;
                    break;
            case 3:
                    ergebnis=zahl1*zahl2;
                    break;
            }
    //Ausgabe je nach Status von flag
    if (flag==0)
            Label1->Caption=ergebnis;
    else
            {
            Label1->Caption="Nicht definiert!";
            }
    }
    
    //---------------------------------------------------------------------------
    void check (int zahl)
    {
    if (zahl != int())
            throw Exception ("Die Zahl ist kein gültiger Integerwert");
            Edit1 ->SetFocus();
    }
    [/cpp]
    

    Mein Hauptproblem ist hierbei das Setzen des Focus. Nach Möglichkeit sollte die Funktion den Focus automatisch auf das fehlerhafte Eingabefeld setzen können. Wer kann helfen? 😞



  • Hallo

    Übergib einfach zusätzlich an die Funktion check noch einen Zeiger auf das TEdit, aus dem du die Zahl geholt hast.

    Btw. gehört das ins Builder-Subforum.

    bis bald
    akari



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

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

    Dieses Posting wurde automatisch erzeugt.



  • [quote="akari"]Hallo

    Übergib einfach zusätzlich an die Funktion check noch einen Zeiger auf das TEdit, aus dem du die Zahl geholt hast.

    Btw. gehört das ins Builder-Subforum.

    bis bald
    akari[/quote]

    Danke akari, das hat geholfen 🙂


Anmelden zum Antworten