Wie kann ich "Immerwiederverwendbare Funktionen" in Windows Forms deklarieren?



  • Hello Again 🙂

    Folgendes bei Windows Forms hat unserer Lehrer uns erklärt wird einfach alles in Form1.h ( wenn man sie so nennt ) geschrieben.

    Aber wie kann ich jetzt eine Funktion wie

    bool pruefen(String^ s)
    {
        if ((s->Length > 5) && 
            (s->Substring(s->Length - 6)->ToLower() == "hallo"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    

    So deklarieren, dass ich aus jederzeit über einen Button Klick oder ähnliches drauf zu greifen kann.

    Benötige dies für

    txtBox2->Text=(gast->Find(gcnew Predicate<String^>(pruefen)));
    

    Fehlermeldungen:

    error C3867: "Test::Form1::pruefen": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&Test::Form1::pruefen", um einen Zeiger auf den Member zu erstellen.
    
    error C3350: "System::Predicate<T>": Ein Delegatkonstruktor erwartet 2 Argument(e).
    

    Obwohl ich den code direkt aus der Microsoft Visual Studio Hilfe habe!!
    Danke schonmal für alle antworten 🙂



  • txtBox2->Text=(gast->Find(gcnew Predicate<String^>(pruefen)));
    

    vielleicht mit der Argumentenliste aufrufen? 😕

    txtBox2->Text=(gast->Find(gcnew Predicate<String^>(pruefen(String^ s))));
    

    aber ehrlich gesagt versteh ich nicht so ganz was du machen willst 😕

    Du meinst bestimmt ein Event oder? Da musst du ein ButtonClick event erstellen und in den event deine Funktion aufrufen. Oder willst du was anderes machen?



  • wenn der Button auch zu Form1 gehört, dann passt schon alles.
    Wenn die "pruefen" Funktion von mehreren Forms aus verwendet werden soll,
    wirds das beste sein, eine neue Klasse anzulegen und die "pruefen" Funktion statisch zu machen:

    Header:

    ref class myFunctions
    {
    public:
        static bool pruefen();
    }
    

    Source:

    #include "myFunctions.h"
    bool myFunctions::pruefen(System::String ^ Str)
    {
    ...
    }
    

    Aufruf über:

    bool foo = myFunctions::pruefen(...);
    

    mfg
    Martin

    PS:
    Statt der Klasse mit statischer Funktion kannst du natürlich auch einen
    namespace anlegen und die Funktion da reinpacken.



  • Naja, also du musst dir das so vorstellen.

    In diese Listen sind namen vorname etc. gespeichert von Kunden.
    Diese werden in eine Combobox aufgelistet, wähle ich mir dann einen aus, werden die Daten von ihm in Textboxen angezeigt.

    Also, wenn dieses Selected ist dann passiert halt was ( bis jetzt hab ich erstmal zum testen ganz normal nen button benutzt)

    Da kann ich aber die Funktion nicht reinschreiben, da meint dass dis innerhalb einer funktion nicht geht oder so ähnlich.
    Deswegen muss ich es ausgliediern 🙂

    Hab deinen Quellcode auch probiert hat noch keinen erfolg gebracht immernoch der gleiche Fehler 😕



  • Okay ich werd mal von any.... mal ausprobieren 🙂 danke schonmal



  • So super hat alles erstmal soweit geklappt mit der klasse und so aber jetzt hab ich immernoch 2 fehler -.-

    Code für Textboxausgabe :

    txtBox2->Text=(gast->Find(gcnew Predicate<String^>(funktionen::pruefen(gast))));
    
    funktionen::pruefen': Konvertierung des Parameters 1 von 'System::Collections::Generic::List<T> ^' in 'System::String ^' nicht möglich
    

    und immernoch 😃

    error C3350: "System::Predicate<T>": Ein Delegatkonstruktor erwartet 2 Argument(e).
    

    Vielleicht hilft noch etwas, das steht bei beiden drunter ...

    with
           [
               T=System::String ^
            ]
    

    Aber Danke schonmal für das mit der Funktion echt klasse 🙂



  • Elixir schrieb:

    [cpp]txtBox2->Text=(gast->Find(gcnew Predicate<String^>(funktionen::pruefen(gast))));[/cpp]

    Das gibt dem Fehler da der gast ja kein String^ ist! Ich weiß jetzt nichts über diese Klasse gast aber probier dann halt

    txtBox2->Text=(gast->Find(gcnew Predicate<String^>(funktionen::pruefen(gast->ToString()))));
    


  • Jo 🙂 hab den einen Fehler aufgelöst:

    txtBox2->Text=(gast->Find(gcnew Predicate<String^>(funktionen::pruefen(Convert::ToString(gast)))));
    

    Damit ist der Fehler aufgelöst!

    Kommt jetzt ein neuer :

    error C3364: "System::Predicate<T>": Ungültiges Argument für den Delegatkonstruktor. Delegatziel muss ein Zeiger auf eine Memberfunktion sein.
    

    WEiß jemand rat? 🙂



  • Okay leute lösung des problems war folgendes :

    Nachdem ich alles ordentlich deklariert habe mit der Funktion als klasse und nun ordentlich aufrufen kann, hab ich folgendes gemacht:

    txtBox2->Text=(gast->Find(gcnew Predicate<String^>(funktionen::pruefen)));
    

    Und voila kein fehler mehr und alles funzt wie es soll 🙂

    DANKE VIELMALS FÜR ALL DIE HILFE !! MERCI MERCI 🙂 👍 👍

    Super Forum 🙂


Anmelden zum Antworten