Entwickler-Ecke
WinForms - MouseUp selber machen ?
Delete - Mi 18.04.12 00:26
Titel: MouseUp selber machen ?
Hallo liebe Community,
wollte mir ein MouseUp Event mal selber schreiben, kommt leider aber immer nur ein MouseDown Event dabei heraus :(
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| private void timer1_Tick(object sender, EventArgs e) { if (MouseButtons == MouseButtons.Right) { while (MouseButtons == null) { Application.DoEvents(); } } } |
Was muss man den prüfen lassen um zu bestimmen ob eine bestimmte Taste losgelassen wird ?
Liebe Grüße BleachRukia
jaenicke - Mi 18.04.12 07:36
Was hat ein Mausevent mit einem Timerevent zu tun? :gruebel:
Was du eigentlich erreichen willst (und deshalb auch was du mit dem Code erreichen möchtest), erschließt sich mir nicht. :nixweiss:
Wenn du im Timer prüfen willst, ob die Taste losgelassen wurde, musst du den aktuellen Status mit einem gespeicherten letzten geprüften Status vergleichen. Wenn sich dabei eine Änderung ergibt, wurde die Taste gedrückt bzw. losgelassen. Danach schreibst du den aktuellen Status in die Variable mit dem zuletzt geprüften.
ujr - Mi 18.04.12 10:20
Was genau versuchst Du mit "Application.DoEvents" zu erreichen? Das ist, und vor allem hier in einem Timer, sinnlos und gefährlich.
Ralf Jansen - Mi 18.04.12 11:32
| Zitat: |
| wollte mir ein MouseUp Event mal selber schreiben, |
Das Control für das du das machen willst ableiten, die WndProc Methode überschreiben, die WM_RBUTTONUP (0x0205) Message fangen (für die andern MouseButtons entsprechende andere) und dann deinen Event auslösen.
Wenn dein Event global sein soll und sich nicht auf ein bestimmtes Control beziehen soll dann brauchst du einen
Mouse Hook [
http://support.microsoft.com/kb/318804/de].
Übrigens die MouseButtons Property wird nie null zum Glück sonst hättest du dir vermutlich ein Endlosschleife (zumindest solange keiner eine Taste drückt) gebastelt und gleichzeitig wären immer weitere Tick Events aufgelaufen die auch noch durch dein Application.DoEvents() zur Ausführung gekommen währen. Mittelfristig wäre dir vermutlich der Callstack um die Ohren geflogen.
SharinganShuriken - Do 19.04.12 00:47
Hallo liebe Community,
musste mich hier neu anmelden weil mein EMail Account in dem unter anderem auch die Anmeldungsinformationen für diese Seite gespeichert waren gehackt wurde, konnte jetzt leider keinen Admin finden, wenn ein Admin dies liest bitte das BleachRukia Konto löschen oder ihr den Link zu einem Admin Profil habt, das ich dann einem Admin bescheid sagen kann.
Jetzt zum MouseUp Event, hier ist die Lösung dafür:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| MouseButtons mouseButtons = MouseButtons.None; int i = 0; private void timer1_Tick(object sender, EventArgs e) { if (MouseButtons == MouseButtons.Right) { this.mouseButtons = MouseButtons; }
if (this.mouseButtons == MouseButtons.Right) { if (MouseButtons == MouseButtons.None) { this.Text = i++.ToString(); this.mouseButtons = MouseButtons.None; } } } |
Liebe Grüße SharinganShuriken
jaenicke - Do 19.04.12 06:28
Ich verstehe zwar immer noch nicht was du da machen willst, aber wenn es funktioniert, ist es ja gut.
SharinganShuriken hat folgendes geschrieben : |
| konnte jetzt leider keinen Admin finden, wenn ein Admin dies liest bitte das BleachRukia Konto löschen oder ihr den Link zu einem Admin Profil habt, das ich dann einem Admin bescheid sagen kann. |
Siehe ganz unten auf der Seite oder rechts unter Quicklinks "
Kontakt zum Team [
http://www.c-sharp-forum.de/vc.php?mode=new&ref_type=0]". ;-)
SharinganShuriken - Do 19.04.12 16:45
Tausend Dank für den Quicklink :D
Ich prüfe mit dem Tick Event vom Timer ob die rechte Maustaste gedrückt wird, wenn dies der Fall ist soll etwas ausgeführt werden, das Problem war aber gewesen, wenn ich die rechte Maustaste gedrückt halte wird das was ich ausführen will jedes mal bei Tick Event aufgerufen also jede Millisekunde :(, deshalb musste ich etwas schreiben was erst wenn ich die rechte Maustaste loslasse ausgeführt werden soll :D
LG SharinganShuriken
Ralf Jansen - Do 19.04.12 17:43
| Zitat: |
| Tick Event aufgerufen also jede Millisekunde |
Der Tick Event wird sicherlich nicht jede Millisekunde aufgerufen. Aus der Doku
| Msdn hat folgendes geschrieben: |
| The Windows Forms Timer component is single-threaded, and is limited to an accuracy of 55 milliseconds. |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!