Ereignisse in eigener Unit



  • Hi,

    Ich habe ein Problem. Ich habe in meinem Programm sehr viele ButtonClick's drin. Das macht aber alles so unübersichtlich. Kann ich die ButtonClick Ereignisse alle in eine eigene Datei packen??? Wie muss ich da vorgehen??? Hoffe auf Hilfe.



  • hallo,

    es gibt mehrere möglichkeiten. die buttonclicks selber kannst du zwar nicht in eine andere unit auslagern, dafür aber den code der darin steht. somit kannst du von der buttonclick aus die jeweilige funktion aufrufen, was den code in der formular-unit deutlich reduziert und übersichtlicher macht. sachen, die du aber im code ansprichst, die musst du als parameter transportieren damit sie dir in deiner funktions-unit zur verfügung stehen, ausserdem musst du dort dann auch die notwendigen includes einbauen (der compiler sagts dir dann). eine andere möglichkeit ist es, zusammengehörende buttons, die ähnliche funktionalität haben, in einem eventhandeler unterzubringen und die einzelnen button über den sender ermitteln. dann kannst du denn allgemeinen code den jeder button verwendent einbauen und den spezifischen wird entsprechend dem sender ausgeführt. es ist eigentlich sowieso guter stil (programmier-stil), dass man in einen event-handler nicht direkt den arbeitscode schreibt, sondern nur die entsprechende routine aufruft (änderungen sind somit einfacher möglich, übersichtlicher, leichtere erweiterbarkeit, bessere testmöglichkeiten, arbeitscode von gui trennen, etc. tt). leider machen das die wenigstens, aber bei wirklich grossen projekten ist sowas gang und gebe, ansonsten chaos hoch zehn...

    mfg
    murph



  • Könntest du mir bitte ein Code beispiel geben? Finde das sonst schwer zu verstehen.



  • hallo,

    ich soll dir also die lösung an den arsch hin tragen? also gut, weil ich nicht will, dass du für dein ganzes anstehendes programmierer leben versaut wirst, gebe ich ein codebeispiel, aber simpel, und mit copyright:

    //Formular-unit cpp-datei
    void __fastcall TForm1::TheButtonClick(TObject *Sender)
    {   //Hier nicht die eigentliche funktionalität, sondern nur der aufruf derer.
        if (ParseEdit(TheEdit))
        	ShowMessage("A vorhanden!"); //und das was halt noch notwendig ist.
        else
        	ShowMessage("A nicht vorhanden!");
    }
    
    //funktions-unit das die eigentliche funktionalität enthält, vorteil leicht er
    //weiterbar, umbaubar, wiederverwendbar, dies alles kann natürlich auf auf die
    //objectorientierte weise realisiert werden, aber für den anfang ist das schon
    //mal ein gut ansatz, und bei dieser funktionaltität auch völlig ausreichend:
    //cpp-unit der funktions-unit:
    
    bool ParseEdit(TEdit* AEdit)
    {
     	for (int i = 1; i <= AEdit->Text.Length(); i++)
        	if (AEdit->Text[i] == 'A')
            	return true;
        return false;
    }
    
    //header der funktions-unit:
    
    bool ParseEdit(TEdit* AEdit); //schnittstelle nach ausssen, damit das in der
    //formular-unit verwendet werden kann, muss dort mit #include unitXY; 
    //eingebunden werden.
    

    denk dran cpp ist case-sensitive, d. h. nur ein A ist ein a, also auf gross kleinschreibung achten, bei kleinem a wird false zurückgegeben...

    mfg
    murphy



  • murphy schrieb:

    hallo,
    ich soll dir also die lösung an den arsch hin tragen?

    So war das nicht gemeint. Wollte nur mal sehen wie das ungefähr auszusehen hat.
    Vielen Dank für die Hilfe. Jetzt kann ich mal daran Arbeiten das alles übersichticher wird. 👍



  • hallo,

    ist auch von meiner seite nicht so gemeint, solche dinge meine ich immer ironisch...

    mfg

    murphy


Anmelden zum Antworten