Event auslösen



  • Wie kann man in C# ein Event von einem Control-Element manuell auslösen?

    Beispiel: Ich habe einen Button. Dem Button hab ich für das Click-Event eine Methode zugewiesen:

    private void myButton_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Hallo");
    }
    

    Nun will ich im Code einen Klick simulieren. Wie mache ich das? Einfach

    myButton_Click(this, new EventArgs());
    

    aufrufen kann's ja nicht sein, da es auch möglich wäre, dass mehrere Methoden am Ereignis hängen, und die dann alle abgearbeitet werden sollten. Ich suche also sowas in der Art wie

    myButton.Click(this, new EventArgs());
    

    Was muss ich dafür tun?

    PS: Das mit dem Button war nur ein Beispiel. Ich weiß, dass es da die Methode PerformClick gibt, aber ich suche nach einer Lösung, die gleichermaßen für alle Ereignisse funktioniert, mit der ich also zum Beispiel auch die Funktionalität des MouseHover-Events selbst auslösen kann.



  • Du musst als Sender den Button angeben, dann sollte es egal sein ob eine Funktion von mehreren Controls verwendet wird.



  • Es geht nicht darum, ob eine Funktion von mehreren Controls verwendet wird, sondern darum, dass das Event eines Controls mehrere Funktionen hat:

    myButton.Click += new EventHandler(myButton_Click);
    myButton.Click += new EventHandler(ASecondFunction);
    

    Wie simuliere ich hier das Event? (Ja, ich weiß: Mit PerformClick. Aber ich meine, wie würde ich in diesem Fall ein beliebiges Event simulieren?)



  • Da wird es keine einfache Patentlösung geben.



  • Event auslösen schrieb:

    Es geht nicht darum, ob eine Funktion von mehreren Controls verwendet wird, sondern darum, dass das Event eines Controls mehrere Funktionen hat:

    myButton.Click += new EventHandler(myButton_Click);
    myButton.Click += new EventHandler(ASecondFunction);
    

    Wie simuliere ich hier das Event? (Ja, ich weiß: Mit PerformClick. Aber ich meine, wie würde ich in diesem Fall ein beliebiges Event simulieren?)

    Wie ein beliebiges Event simulieren? Alle Events du beim Click Eventhandler anmeldest, werden alle automatisch ausgeführt sobald das Event eintritt.



  • wie waere es mit RaiseEvent?

    RoutedEventArgs newEventArgs = new RoutedEventArgs(Button.ClickEvent);
    yourButton.RaiseEvent(newEventArgs);
    /*...*/
    //oder
    Raise(yourButton, Button.ClickEvent);
    /*...*/
    private void Raise(UIElement element, RoutedEvent routedEvent)
    {
        RoutedEventArgs newEventArgs = new RoutedEventArgs(routedEvent);
        element.RaiseEvent(newEventArgs);
    }
    


  • Firefighter schrieb:

    Wie ein beliebiges Event simulieren? Alle Events du beim Click Eventhandler anmeldest, werden alle automatisch ausgeführt sobald das Event eintritt.

    Ja, aber was ist, wenn ich das Event im Code aufrufen will? Wenn ich will, dass die Reaktion auf KeyDown nicht nur erfolgt, wenn der Benutzer tatsächlich auf eine Taste gedrückt hat, sondern wenn ich irgendwo im Programm so tun will, als hätte jemand auf eine Taste gedrückt.
    Ich will also ein beliebiges Event aus dem Code heraus schmeißen.



  • Ruf doch die OnClick Methode auf?Der Sender ist dann...this? und als EventArgs, null übergeben, sollte doch gehen oder?



  • Firefighter schrieb:

    Ruf doch die OnClick Methode auf?

    Die OnClick-Methode ist protected.



  • @Event auslösen
    mein beitrag gelesen? RaiseEvent ist genau dafuer da events aus zu loesen



  • Mr Evil schrieb:

    @Event auslösen
    mein beitrag gelesen? RaiseEvent ist genau dafuer da events aus zu loesen

    Aber nur für WPF verfügbar?!



  • jups
    ich dacht du programmierst mit etwas guten #gg



  • Mr Evil schrieb:

    jups
    ich dacht du programmierst mit etwas guten #gg

    Denk das nächste mal lieber an den Fragesteller! :p



  • hab ich ja versucht, nur konnte man ja nicht erkennen was er verwendet {o;
    {ersetz in meinem satz das "du" mit einen "er" #ggg}



  • LordJaxom schrieb:

    Firefighter schrieb:

    Ruf doch die OnClick Methode auf?

    Die OnClick-Methode ist protected.

    Ja ist mir auch ebend aufgefallen...Mein fehler sorry.



  • Puh, wie binde ich das jetzt ein?

    Raise(yourButton, Button.ClickEvent); 
    /*...*/ 
    private void Raise(UIElement element, RoutedEvent routedEvent) 
    { 
        RoutedEventArgs newEventArgs = new RoutedEventArgs(routedEvent); 
        element.RaiseEvent(newEventArgs); 
    }
    

    Bei mir fehlt immer ein Assemblyverweis. Und wenn ich z.B. using System.Windows.RoutedEvent; angebe, kommt der Fehler "Ist nicht im Namespace von Windows enthalten".

    Muss ich noch was runterladen und importieren? Wo?



  • Nur den Namespace angeben:

    using System.Windows;
    


  • Th69 schrieb:

    Nur den Namespace angeben:

    using System.Windows;
    

    UIElement und RoutedEvent werden trotzdem noch als fehlerhaft unterstrichen 😢



  • David_pb schrieb:

    Aber nur für WPF verfügbar?!

    Nutzt du WPF oder WinForms?



  • Ich habe eine Windows Form Anwendung


Anmelden zum Antworten