Autor Beitrag
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 :(

ausblenden 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();
                    //Mach etwas
                }
            }
        }


Was muss man den prüfen lassen um zu bestimmen ob eine bestimmte Taste losgelassen wird ?

Liebe Grüße BleachRukia
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 102
Erhaltene Danke: 12



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

Windows 7 Home Premium (64 Bit)
Visual Studio 2010 Professional, C# - SlimDX - Direct3D11
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.

user profile iconSharinganShuriken hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

Windows 7 Home Premium (64 Bit)
Visual Studio 2010 Professional, C# - SlimDX - Direct3D11
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.