2017-08-07 4 views
0

Ich versuche eine Funktion wie "HoldFunction", während der Berührung (MouseDown) und während maximal 1 Sekunde zu laden.Kombination von MouseDown und Timer

Also wenn Benutzer versuchen, für eine Sekunde zu berühren und zu halten, muss ich die Funktion aufrufen, und dies ist nicht mit MouseUp verbunden.

Vielleicht muss ich diese kombinieren:

private DateTime dtHold; 
private void EditProduct_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
dtHold = DateTime.Now; 
} 
private void EditProduct_MouseUp(object sender, MouseButtonEventArgs e) 
{ 
TimeSpan interval = TimeSpan.FromSeconds(1); 
if (DateTime.Now.Subtract(dtHold) > interval) 
{ 
//HoldFunction(); 
} 
} 

und

System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); 
    private void EditProduct_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
    dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); 
    dispatcherTimer.Interval = new TimeSpan(0, 0, 0,1,0); 
    dispatcherTimer.Start(); 
    } 

    private int _sec = 0; 
    private void dispatcherTimer_Tick(object sender, EventArgs e) 
    { 
     _sec = _sec + 1; 
     if (_sec == 2) 
     { 
      dispatcherTimer.Stop(); 
      { 
       //HoldFunction(); 
      } 
      _sec = 0; 
      return; 
     } 
    } 

Antwort

0

Ist das, was Sie suchen?

Wenn der Benutzer die MouseDown für 1 Sekunde hält, wird die evnt gefeuert?

public partial class Window2 : Window 
{ 
    private DispatcherTimer _DispatcherTimer = new DispatcherTimer(); 
    public Window2() 
    { 
     InitializeComponent(); 

     MouseDown += _MouseDown; 
     MouseUp += _MouseUp; 

     _DispatcherTimer.Interval = TimeSpan.FromSeconds(1.0); 
     _DispatcherTimer.Tick += _DispatcherTimer_Tick; 
    } 

    private void _DispatcherTimer_Tick(object sender, EventArgs e) 
    { 
     _DispatcherTimer.Stop(); 
     Title = DateTime.Now.ToString(); 
    } 

    private void _MouseUp(object sender, MouseButtonEventArgs e) 
    { 
     _DispatcherTimer.Stop(); 
    } 

    private void _MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     _DispatcherTimer.Start(); 
    } 
} 
+0

Ja, das funktioniert perfekt, danke dir :) – AliMajidiFard9