| Autor |
Beitrag |
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 18.04.12 00:26
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
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 18.04.12 07:36
Was hat ein Mausevent mit einem Timerevent zu tun?
Was du eigentlich erreichen willst (und deshalb auch was du mit dem Code erreichen möchtest), erschließt sich mir nicht.
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
      
Beiträge: 102
Erhaltene Danke: 12
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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.
Ü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
      
Beiträge: 33
Windows 7 Home Premium (64 Bit)
Visual Studio 2010 Professional, C# - SlimDX - Direct3D11
|
Verfasst: 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
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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". 
Für diesen Beitrag haben gedankt: SharinganShuriken
|
|
SharinganShuriken
      
Beiträge: 33
Windows 7 Home Premium (64 Bit)
Visual Studio 2010 Professional, C# - SlimDX - Direct3D11
|
Verfasst: Do 19.04.12 16:45
Tausend Dank für den Quicklink
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
LG SharinganShuriken
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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. |
|
|