Benutzer mit den meisten Antworten
zwischen normale Click und DoubleClick unterscheiden???

Frage
Antworten
-
Hallo,
was genau meinst du denn? Events wie MouseLeftButtonDown werden immer ausgeführt, egal wie geklickt wurde.Nachfolgend mal ein kleiner Beispielcode, der eine Nachricht ausgibt, je nachdem ob einmal oder doppelt geklickt wurde:
const int waitTime = 300;//Anzahl in Millisekunden, zwischen 2 Klicks public MainPage()//Konstruktor { InitializeComponent(); clickWaiter = new DispatcherTimer(); clickWaiter.Tick += (s2, e2) => { //Wird nach waitTime ms das Erste mal ausgelöst switch (clickCount) { case 1: OnClick(); break; case 2: OnDoubleClick(); break;//Events auslösen } clickCount = 0;//zurück setzen clickWaiter.Stop();//sich selbst deaktivieren }; clickWaiter.Interval = TimeSpan.FromMilliseconds(waitTime); } int clickCount = 0;//Anzahl der Klicks DispatcherTimer clickWaiter;//Wartet waitTime ms nach jedem Mouse-Event
Du musst waitTime so anpassen, wie es sich am besten "anfühlt". 300ms sind vielleicht etwas lang gewählt, so wird aber auch ein langsamer Maus-Bediener diesen hin bekommen.
//Dieses Event muss vom Control ausgelöst werden, dass die Mouse-Events verarbeiten soll private void OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { clickWaiter.Stop(); ;//Jetzigen Timer unterbrechen clickWaiter.Start();//Timer starten um waitTime ms abzuwarten ++clickCount;//Anzahl der Klicks erhöhen } //Nachfolgend die Events, in denen du deinen Code einfügst void OnClick() { //Einfach geklickt... MessageBox.Show("Einfacher Klick"); } void OnDoubleClick() { //Doppelt geklickt... MessageBox.Show("Doppelter Klick"); }
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort markiert Nunui Montag, 10. März 2014 10:02
Sonntag, 9. März 2014 15:36
Alle Antworten
-
Hallo,
was genau meinst du denn? Events wie MouseLeftButtonDown werden immer ausgeführt, egal wie geklickt wurde.Nachfolgend mal ein kleiner Beispielcode, der eine Nachricht ausgibt, je nachdem ob einmal oder doppelt geklickt wurde:
const int waitTime = 300;//Anzahl in Millisekunden, zwischen 2 Klicks public MainPage()//Konstruktor { InitializeComponent(); clickWaiter = new DispatcherTimer(); clickWaiter.Tick += (s2, e2) => { //Wird nach waitTime ms das Erste mal ausgelöst switch (clickCount) { case 1: OnClick(); break; case 2: OnDoubleClick(); break;//Events auslösen } clickCount = 0;//zurück setzen clickWaiter.Stop();//sich selbst deaktivieren }; clickWaiter.Interval = TimeSpan.FromMilliseconds(waitTime); } int clickCount = 0;//Anzahl der Klicks DispatcherTimer clickWaiter;//Wartet waitTime ms nach jedem Mouse-Event
Du musst waitTime so anpassen, wie es sich am besten "anfühlt". 300ms sind vielleicht etwas lang gewählt, so wird aber auch ein langsamer Maus-Bediener diesen hin bekommen.
//Dieses Event muss vom Control ausgelöst werden, dass die Mouse-Events verarbeiten soll private void OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { clickWaiter.Stop(); ;//Jetzigen Timer unterbrechen clickWaiter.Start();//Timer starten um waitTime ms abzuwarten ++clickCount;//Anzahl der Klicks erhöhen } //Nachfolgend die Events, in denen du deinen Code einfügst void OnClick() { //Einfach geklickt... MessageBox.Show("Einfacher Klick"); } void OnDoubleClick() { //Doppelt geklickt... MessageBox.Show("Doppelter Klick"); }
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort markiert Nunui Montag, 10. März 2014 10:02
Sonntag, 9. März 2014 15:36 -
Danke für die Lösung. In meinem jetzigen Code sind für einfache Klick und DoppelKlick folgende Events schon vorhanden:
this.AddHandler(FrameworkElement.MouseLeftButtonUpEvent, new MouseButtonEventHandler(HandleMouseLeftButtonUp), true); private void HandleMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { } this.AddHandler(CalendarView.DoubleClickEvent, new RoutedEventHandlerEx<DoubleClickRoutedEventArgs>(HandleCalendarDoubleClick)); private void HandleCalendarDoubleClick(object sender, DoubleClickRoutedEventArgs e1) { }
Wie könnte ich Deinen Vorschlag für meinen Code umsetzen?
Gruesse, NUNUI
Sonntag, 9. März 2014 20:25 -
Was genau ist CalendarView? Die Klasse scheint es zumindest in Silverlight 5 nicht zu geben.
Es wirkt ein wenig seltsam, dass es ein DoubleClick aber kein einfaches Click-Event gibt.
Da LeftButtonUp wahrscheinlich vor DoubleClick ausgelöst wird, würde ich auf das vorgefertigte DoubleClick-Event verzichten und stattdessen nur meine Methode benutzen.
Alternativ kannst du auch das DoubleClick-Event weiter benutzen und aus meinem Code den Handler für DoubleClick heraus löschen.Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.Sonntag, 9. März 2014 20:42