Visual Studio Button lange drücken

OP #6055057
Lesenswert?

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
OP #6055223
Lesenswert?

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
Gast #6055271
Lesenswert?

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.
OP #6055397
Lesenswert?

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
(Firma: Schweigstill IT) Persönliche Seite #6055429
Lesenswert?

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.
#6055442
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren