Hallo zusammen, Habe mal wieder eine Frage zu Visual Studio. Ich möchte wenn ich einen Button kurz drücke eine Aktion auslösen, wenn ich den Button jedoch länger drücke eine andere Aktion auslösen. Programmiere mit C#. Gibt es da eine Möglichkeit ? Wäre über Tipps sehr dankbar :) Gruß Fuchs
Hallo! Evtl wäre es denkbar die beiden Events mouse down und mouseup zu abonnieren. Bei mouse down eine stopwatch starten und die abgelaufene zei bei mouseup abfragen und auswerten
Danke das hilft mir schon weiter werde das gleich mal ausprobieren. Gruß Fuchs
Die Events KeyDown und KeyUp für den Button wären ein Ansatzpunkt. Bei KeyDown Zeitpunkt merken und bei KeyUp die Zeitdauer auswerten und entsprechende Aktionen starten.
Habe mir jetzt einen Code gebastelt allerdings funktioniert der nicht. Habe noch nie mit MouseDown bzw. MouseUp gearbeitet. Kann mir jemand weiterhelfen was ich falsch gemacht habe ? Private Sub Button_M1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) down = Now Timer2.Enabled = True End Sub Private Sub Button_M1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Timer2.Enabled = False speichern = False End Sub Private Sub Timer2_Timer() If DateDiff("s", down, Now) > 1 Then speichern = True End If End Sub Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick If DateDiff("s", down, Now) > 1 Then speichern = True End If End Sub Private Sub Button_M1_Click() If speichern = True Then SerialPort1.Write("+") Else SerialPort1.Write("a") End If End Sub Private Sub Button_M1_Click(sender As Object, e As EventArgs) Handles Button_M1.Click If speichern = True Then SerialPort1.Write("+") Else SerialPort1.Write("a") Label_Drehzahl.Text = Label2.Text End If SerialPort1.Write("e") End Sub
Man kann das mit den Events und einem timer lösen, aber das ist nicht konform zu den Windows Bedienkonventionen. Ich würde davon abraten: Es gibt unter Windows einfach nicht diese Unterscheidung für Buttons, und daher ist das völlig unintuitiv.
bist du dir sicher, dass du mit c# programmierst und nicht mit irgendwas basic-mäßigem?
Sven K. schrieb: > bist du dir sicher, dass du mit c# programmierst und nicht mit irgendwas > basic-mäßigem? Sorry, ist natürlich kein C# sondern VB
Angenommen, dein "längeres" Drücken sind 2s: 1. Button wird 5s gedrückt, nach 2s wird automatisch etwas ausgelöst. oder 2. Button wird mindestens 2s gedrückt, nach dem loslassen wird etwas ausgelöst. Was willst du genau, Fall 1 oder Fall 2? merciless
Dirk K. schrieb: > Angenommen, dein "längeres" Drücken sind 2s: > 1. Button wird 5s gedrückt, nach 2s wird automatisch > etwas ausgelöst. > oder > 2. Button wird mindestens 2s gedrückt, nach dem > loslassen wird etwas ausgelöst. > > Was willst du genau, Fall 1 oder Fall 2? > > merciless Fall 1 möchte ich ;) Nur steh ich da total auf dem Schlauch. Fuchs
M. F. schrieb: > Dirk K. schrieb: >> Angenommen, dein "längeres" Drücken sind 2s: >> 1. Button wird 5s gedrückt, nach 2s wird automatisch >> etwas ausgelöst. > > Fall 1 möchte ich ;) Und was soll nach vier Sekunden passieren? A) Das Ereignis wird erneut ausgelöst? B) Es wird kein weiteres Ereignis ausgelöst, bis das Drücken hinreichend lange (wie lange?) unterbrochen wurde? Das ganze schreit doch nach einem ordentlichen Zustandsautomaten, der mit Tasten- und Timerereignissen gefüttert wird.
:
Bearbeitet durch User
Deine Benutzer werden Dich verfluchen, bei manchen könnte sogar das Vertrauen in Deinen Sachverstand in Mitleidenschaft gezogen werden, in einigen Fällen eventuell sogar dauerhaft. Also tu das lieber nicht.
M. F. schrieb: > Fall 1 möchte ich ;) > > Nur steh ich da total auf dem Schlauch. Dann musst du mit Timern hantieren - Beim Drücken einen Timer starten. - Wenn vorzeitig losgelassen wird, Timer disablen. - Wenn Timer abgelaufen ist, Timer disablen und Aktion auslösen. (Timer disablen, wenn das Ereignis nur einmalig ausglöst werden soll) Und bitte: Bau deine eigene Button-Klasse und pack den Code dort rein. Der 2. Fall wäre halt einfacher gewesen: Beim Drücken Zeitstempel merken, beim Loslassen Differenz zur aktuellen Zeit berechen. Wenn die Differenz größer ist als die (fiktiven) 2s, Spezial-Aktion auslösen ansonsten normale Aktion. Das ganze ist natürlich überhaupt nicht intuitiv und sowas erwartet auch niemand. Warum keine 2 Buttons, oder eine Checkbox für Speichern oder sowas? merciless
:
Bearbeitet durch User
Warum nimmst du keine stopwatch? https://docs.microsoft.com/de-de/dotnet/api/system.diagnostics.stopwatch?view=netframework-4.8
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.