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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.