2010-06-02 5 views
1

J'ai un chronomètre chronomètre que j'ai ajouté à mon programme. Cela fonctionne bien sur ma machine Win 7, et sur les machines Vista que j'ai essayées, mais sous XP, les zéros hrs et mins disparaissent quand la minuterie démarre, mais reviendront si je réinitialise la minuterie. Voici tout mon code que j'ai pour le minuteur. J'ai supprimé tout ce qui ne semblait pas nécessaire pour diagnostiquer le problème:Étiquette affichant le Timespan disparaissant dans XP mais pas dans les versions plus récentes de Windows

DateTime startTime, stopTime; 
    TimeSpan stoppedTime; 
    bool reset; 



    private void btnStopwatchStart_Click(object sender, EventArgs e) 
    { 
     // Start timer and get starting time 
     if (reset) 
     { 
      reset = false; 
      startTime = DateTime.Now; 
      stoppedTime = new TimeSpan(0); 
     } 
     else 
     { 
      stoppedTime += DateTime.Now - stopTime; 
     } 
     stopwatchTimer.Enabled = true; 
    } 

    private void btnStopwatchReset_Click(object sender, EventArgs e) 
    { 
     // Reset displays to zero 
     reset = true; 
     lblElapsed.Text = "00:00:00"; 
    } 

    private void btnStopwatchPause_Click(object sender, EventArgs e) 
    { 
     // Stop timer 
     stopTime = DateTime.Now; 
     stopwatchTimer.Enabled = false; 
    } 

    private void stopwatchTimer_Tick(object sender, EventArgs e) 
    { 
     DateTime currentTime; 
     // Determine elapsed and total times 
     currentTime = DateTime.Now; 

     // Display times 
     lblElapsed.Text = HMS(currentTime - startTime - stoppedTime); 
    } 

    private string HMS(TimeSpan tms) 
    { 
     // Format time as string, leaving off last six decimal places 
     string s = tms.ToString(); 
     return (s.Substring(0, s.Length - 6)); 
    } 

Répondre

2

Une version antérieure de .NET, peut-être? Votre fonction HMS() dépend essentiellement du nombre de chiffres générés par TimeSpan.ToString(). Voici une meilleure façon de le formater:

private static string HMS(TimeSpan tms) { 
     return new DateTime(tms.Ticks).ToString("H:mm:ss"); 
    } 
+0

Merci! Cela fonctionne très bien ici sur la machine Win7 (avec .NET 4.0). Il va être testé sur une machine XP ici dans quelques heures. – EvanRyan

+0

Oui, TimeSpan.ToString() a été modifié dans .NET 4.0. Le remplacement que je vous ai donné fonctionnera systématiquement sur n'importe quelle version de .NET –

Questions connexes