Event auslösen
-
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 loesenAber 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 #ggDenk 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
-
Dann sind deine und meine Frage beantwortet. - > Wie oben geschrieben ist der Weg nur für WPF verfügbar.
-
Na toll. Aber das löst "unser" Problem immer noch nicht...
-
Was ich mir vorstellen könnte, wäre dass du von dem jeweiligen Control erbst und eine public Methode implementierst, die das geerbte Event auslöst.
-
button.Click( this, EventArgs.Empty);
-
Es ist so wie du möchtest eigentlich nicht möglich.
Wenn du die EventArgs mit bekommen willst musst du diese entweder per Hand erstellen oder ein Event über die WinApi simulieren (Es ist da möglich einen klick auf einem button zu simulieren)
Ich hab sowas schonmal geschrieben wenn du möchtest kann ich das hier posten
-
Hey schrieb:
Es ist so wie du möchtest eigentlich nicht möglich.
Wenn du die EventArgs mit bekommen willst musst du diese entweder per Hand erstellen oder ein Event über die WinApi simulieren (Es ist da möglich einen klick auf einem button zu simulieren)
Er möchte keinen Klick simulieren, er möchte alle Events auslösen können.
Aber wie du bereits sagst ist das so nicht möglich und das hat einen guten Grund: Es ist unsauber, wenn man zu solchen Tricks greifen muss läuft irgendwas ziemlich schief.Um noch was konstruktives zum Thema beizutragen:
Die einzige Möglichkeit die mir in den Sinn kommen würde wäre so eine Art Proxy zu verwenden. D.h. für jedes Control eine neue Klasse von diesem ableiten und dann öffentliche Methoden zur Verfügung stellen mit denen man das Event von außen auslösen kann. Ist ein ziemlicher Aufwand und es ist die Frage ob sich die Sache überhaupt lohnt, da ich das für wie, schon gesagt, Frickelei halte.Du solltest eventuell mal beschreiben, was du machen willst, vielleicht gibt es eine andere Lösung für das Problem.