Compte à rebours vb.net - VB / VBA

A voir également:Compte à rebours vb.net[VB.net] Compter le nombre d'enregistrement ✓ - Forum - Framework .NET Compte a rebours facebook - Forum - Facebook Compte à rebours excel ✓ - Forum - Excel Compte a rebours html ✓ - Forum - HTML Compte à rebours powerpoint - Télécharger - Présentation

Bonjour à tous,
Je suis débutant en Programmation, je cherche à faire un compte à rebours tout simple. J'ai essayé mais ça ne marche pas. Jutilise NumericUpDown pour entrer les valeurs au debut.

voici mon code :

 Private Sub Timer_Tick(sender As Object, e As EventArgs) Handles Timer_Countdown.Tick         Dim ss As Integer         Dim mm As Integer         Dim hh As Integer         ss = NumericUpDown3.Value         mm = NumericUpDown2.Value         hh = NumericUpDown1.Value         If hh>= 0 Then              If mm >= 0 Then                  If ss >= 0 Then                     ss -= 1                     Me.TextBox.Text = Format(hh, "00") & ":" & Format(mm, "00") & ":" & Format(ss, "00")                  End If                 ss = 60                 mm -= 1                 Me.TextBox.Text = Format(hh, "00") & ":" & Format(mm, "00") & ":" & Format(ss, "00")             End If             mm = 60             hh -= 1             Me.TextBox.Text = Format(hh, "00") & ":" & Format(mm, "00") & ":" & Format(ss, "00")         End If 


Je vous remercie

Forum

A voir également:Compte à rebours vb.net[VB.net] Compter le nombre d'enregistrement ✓ - Forum - Framework .NET Compte a rebours facebook - Forum - Facebook Compte à rebours excel ✓ - Forum - Excel Compte a rebours html ✓ - Forum - HTML Compte à rebours powerpoint - Télécharger - Présentation

Web: www.shapebootstrap.net

4 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

un exemple:


https://codes-sources.commentcamarche.net/source/view/55063/1302687

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

le code du Pivert (que je salue au passage) est très bien mais pas forcément accessible à un débutant.

Dans le code que tu montres, il y a plusieurs erreur "de débutant", ce n'est ni une critique, ni une moquerie, c'est juste une constation.

  • 1 un contrôle n'est pas une variable, cela sert à transmettre et/ou afficher une donnée pour l'homme, mais son travail n'est pas de la traiter. En l'occurence, tu devrais faire les calculs sont une variable en seconde par exemple, puis afficher la correspondance. Mais il y a le petit 4.
  • 2 cette ligne
    Me.TextBox.Text = Format(hh, "00") & ":" & Format(mm, "00") & ":" & Format(ss, "00")
    est répétée 4 fois, cela veut dire que s'il y a une erreur, il faudra la corriger 4 fois. On évite au maximum la duplication de code.
  • 3 ceci
    Format(hh, "00") & ":" & Format(mm, "00") & ":" & Format(ss, "00")
    se réduit comme ça
    String.Format("{0:00}:{1:00}:{2:00}", hh, mm, ss)
  • 4 il y a des types de données qui caractérisent un moment (DateTime) ou une durée (TimeSpan), ces 2 types de données permettent des calculs sur le temps et l'extraction facile en Heures, minutes et secondes


Te viendrait-il à l'idée de construire une voiture sans avoir appris les rudiments de la mécanique? Probablement pas, pourtant, comme 99.9999% des autodidactes en programmation (j'en ai fait parti, y'a longtemps et je me suis cassé les dents), tu t'es lancé dans ton projet en faisant l'impasse sur les 4 rudiments je viens de lister.

Le meilleur conseil que l'on puisse te donner, c'est de poser ton projet quelques jours , de suivre un cours en ligne, celui-là est pas mal http://plasserre.developpez.com/cours/vb-net/ même s'il considère l'objet comme une mode (VB.Net a écrit conçu pour être codé 100% objet), celui d'openclassroom est un peu moins abordable mais plus orienté objet. Fais bien tout, dans l'ordre, même si ça te parait simple.
Une fois finit, tu pourras reprendre bien plus facilement ton projet.

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

Pour le plaisirs de programmer, voici un autre exemple ou le timer est réalisé maison :-)

  Imports System.Data.Objects.DataClasses Imports System.Runtime.Serialization Imports System.ComponentModel  ''' ---------------------------------------------------------------------------------------------------------- <br /> '''  Systême              : WF_Essais '''  Classe                 : FrmChrono ''' ---------------------------------------------------------------------------------------------------------- <br /> ''' <summary> ''' - - Description de la classe FrmChrono ''' </summary> ''' ---------------------------------------------------------------------------------------------------------- <br /> ''' <History> ''' Historique des modifications: <br /> ''' ---------------------------------------------------------------------------------------------------------- <br /> ''' Demande    Date              Nom                     Description <br /> ''' ---------------------------------------------------------------------------------------------------------- <br /> ''' [100000]     2018-10-10   Programmeur      Création Initiale <br /> ''' </History> ''' ---------------------------------------------------------------------------------------------------------- <br /> ''' <remarks> ''' </remarks> ''' ---------------------------------------------------------------------------------------------------------- <br /> <EdmEntityTypeAttribute(NamespaceName:="WF_Essais", Name:="FrmChrono")> <DataContractAttribute(IsReference:=True)> <Serializable(), CLSCompliant(True)> Public Class FrmChrono  #Region "--- Région Constantes ---"  #End Region  #Region "--- Région Attributs ---"      <Browsable(False), EditorBrowsable(EditorBrowsableState.Never)>     Private zContexte As XContexte = Nothing     <Browsable(False), EditorBrowsable(EditorBrowsableState.Never)>     Private zUtilTemp As Stopwatch = Nothing      <Browsable(False), EditorBrowsable(EditorBrowsableState.Never)>     Private zTemporisateurDecompte As TimeSpan = Nothing     <Browsable(False), EditorBrowsable(EditorBrowsableState.Never)>     Private zTemporisateurEcoule As TimeSpan = Nothing     <Browsable(False), EditorBrowsable(EditorBrowsableState.Never)>     Private zTemporisateurTimer As TimeSpan = Nothing      <Browsable(False), EditorBrowsable(EditorBrowsableState.Never)>     Private zActif As Boolean = False  #End Region  #Region "--- Région Propriétés ---"      <EdmScalarPropertyAttribute()>     <DataMemberAttribute()>     Private Property Contexte As XContexte         Get             Return Me.zContexte         End Get         Set(value As XContexte)             Me.zContexte = value         End Set     End Property      <EdmScalarPropertyAttribute()>     <DataMemberAttribute()>     Private Property TempUtil As Stopwatch         Get             Dim OldInst As Stopwatch = Me.zUtilTemp             If (OldInst Is Nothing) Then                 Me.zUtilTemp = New Stopwatch             End If             Return Me.zUtilTemp         End Get         Set(value As Stopwatch)             Me.zUtilTemp = value         End Set     End Property      <EdmScalarPropertyAttribute()>     <DataMemberAttribute()>     Private Property TemporisateurTimer As TimeSpan         Get             Return Me.zTemporisateurTimer         End Get         Set(value As TimeSpan)             Me.zTemporisateurTimer = value         End Set     End Property      <EdmScalarPropertyAttribute()>     <DataMemberAttribute()>     Private Property TemporisateurDecompte As TimeSpan         Get             Return Me.zTemporisateurDecompte         End Get         Set(value As TimeSpan)             Me.zTemporisateurDecompte = value         End Set     End Property      <EdmScalarPropertyAttribute()>     <DataMemberAttribute()>     Private Property TemporisateurEcoule As TimeSpan         Get             Return Me.zTemporisateurEcoule         End Get         Set(value As TimeSpan)             Me.zTemporisateurEcoule = value         End Set     End Property      <EdmScalarPropertyAttribute()>     <DataMemberAttribute()>     Private Property Actif As Boolean         Get             Return Me.zActif         End Get         Set(value As Boolean)             Me.zActif = value         End Set     End Property  #End Region  #Region "--- Région Constructeurs ---"      Public Sub New(ByRef pContexte As XContexte)          ' Cet appel est requis par le concepteur.         InitializeComponent()          ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().         Me.zContexte = pContexte       End Sub  #End Region  #Region "--- Région Méthodes ---"  #Region "--- Région Évènements ---"  #Region "--- Région Évènements Formulaire ---"      Private Sub FrmChrono_Load(sender As Object, e As EventArgs) Handles MyBase.Load      End Sub  #End Region  #Region "--- Région Évènements Boutons ---"      Private Sub btnDemarrer_Click(sender As Object, e As EventArgs) Handles btnDemarrer.Click          TemporisateurTimer = CaptureDelaiTotalTim(Contexte)         TempUtil.Start()         Actif = True         Me.txtDepart.Text = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")         VerifieTemps(Contexte)      End Sub      Private Sub btnArreter_Click(sender As Object, e As EventArgs) Handles btnArreter.Click          TempUtil.Stop()         Me.txtArret.Text = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")         Actif = False      End Sub      Private Sub btnReset_Click(sender As Object, e As EventArgs) Handles btnReset.Click          TempUtil.Reset()      End Sub      Private Sub btnQuitter_Click(sender As Object, e As EventArgs) Handles btnQuitter.Click          Me.Close()      End Sub  #End Region  #Region "--- Région Évènements TextBox ---"      Private Sub txtHeure_TextChanged(sender As Object, e As EventArgs) Handles txtHeure.TextChanged          ChangementDelaiSouhaite(Contexte)      End Sub      Private Sub txtMinute_TextChanged(sender As Object, e As EventArgs) Handles txtMinute.TextChanged          ChangementDelaiSouhaite(Contexte)      End Sub      Private Sub txtSeconde_TextChanged(sender As Object, e As EventArgs) Handles txtSeconde.TextChanged          ChangementDelaiSouhaite(Contexte)      End Sub   #End Region  #End Region  #Region "--- Région Procédures ---"      Private Sub ChangementDelaiSouhaite(ByRef Contexte As XContexte)          Dim Heure As String = "00"         Dim Minute As String = "00"         Dim Seconde As String = "00"          If (Not (String.IsNullOrEmpty(Me.txtHeure.Text))) Then             Heure = Me.txtHeure.Text.PadLeft(2, "0"c)         End If         If (Not (String.IsNullOrEmpty(Me.txtMinute.Text))) Then             Minute = Me.txtMinute.Text.PadLeft(2, "0"c)         End If         If (Not (String.IsNullOrEmpty(Me.txtSeconde.Text))) Then             Seconde = Me.txtSeconde.Text.PadLeft(2, "0"c)         End If          Me.txtDelaiSouhaite.Text = String.Concat(Heure, ":", Minute, ":", Seconde)       End Sub  #End Region  #Region "--- Région Fonctions ---"      Private Function VerifieTemps(ByRef Contexte As XContexte) As String          Dim Chaine As String = String.Empty          While Actif             TemporisateurEcoule = TempUtil.Elapsed             Me.txtTempEcoule.Text = ConvertirTimeSpanVersChaine(Contexte, TemporisateurEcoule)             Me.txtDecompte.Text = CalculDuDecompte(Contexte, TemporisateurEcoule)             Chaine = Me.txtTempEcoule.Text             Application.DoEvents()          End While          Return Chaine      End Function      Private Function CalculDuDecompte(ByRef Contexte As XContexte, ByVal pTemp As TimeSpan) As String          Dim TempRestantStr As String = String.Empty         Dim Minute As Int64 = 0         Dim Seconde As Int64 = 0         Dim MilliSeconde As Int64 = 0          Dim TempsTotal As TimeSpan = TemporisateurTimer         Dim TempASoustraire As TimeSpan = pTemp          Dim TempRestant As TimeSpan = TempsTotal - TempASoustraire          TempRestantStr = ConvertirTimeSpanVersChaine(Contexte, TempRestant)          Return TempRestantStr      End Function      Private Function CaptureDelaiTotalTim(ByRef Contexte As XContexte) As TimeSpan          Dim Delai As TimeSpan = New TimeSpan(0)          Dim Heure As Int32 = Convert.ToInt32(Me.txtHeure.Text)         Dim Minute As Int32 = Convert.ToInt32(Me.txtMinute.Text)         Dim Seconde As Int32 = Convert.ToInt32(Me.txtSeconde.Text)          ' DD HH MM SS MILLI         Delai = New TimeSpan(0, Heure, Minute, Seconde, 0)          Return Delai      End Function      Private Function ConvertirTimeSpanVersChaine(ByRef Contexte As XContexte, ByVal pTemp As TimeSpan) As String          Dim ChaineTemps As New System.Text.StringBuilder          Dim TempJour As String = pTemp.Days.ToString         Dim TempHeure As String = pTemp.Hours.ToString         Dim TempMinute As String = pTemp.Minutes.ToString         Dim TempSeconde As String = pTemp.Seconds.ToString         Dim TempMilliSeconde As String = pTemp.Milliseconds.ToString          ChaineTemps.Append(TempJour)         ChaineTemps.Append(" ")         ChaineTemps.Append(TempHeure.PadLeft(2, "0"c))         ChaineTemps.Append(":")         ChaineTemps.Append(TempMinute.PadLeft(2, "0"c))         ChaineTemps.Append(":")         ChaineTemps.Append(TempSeconde.PadLeft(2, "0"c))         ChaineTemps.Append(".")         ChaineTemps.Append(TempMilliSeconde.PadLeft(3, "0"c))          Return ChaineTemps.ToString      End Function  #End Region  #End Region  #Region "--- Région Commentaires ---"  #End Region  End Class  


K

Reply
réponses:
  • auteur

    Bonjour Kalissi,

    Je n'ai pas regardé en détail, mai je trouve ton programme paradoxal.
    La question vient d'un débutant, donc l'inonder de

    <EdmEntityTypeAttribute(NamespaceName:="WF_Essais", Name:="FrmChrono")> <DataContractAttribute(IsReference:=True)> <Serializable(), CLSCompliant(True)>
    risque de le perdre en route.

    En plus, tu affiches des millisecondes, mais tu en perds partout.
    Un exemple ici
        Private Function CalculDuDecompte(ByRef Contexte As XContexte, ByVal pTemp As TimeSpan) As String          Dim TempRestantStr As String = String.Empty         Dim Minute As Int64 = 0         Dim Seconde As Int64 = 0         Dim MilliSeconde As Int64 = 0 'ces 3 variable ne servent à rien, temps perdu à les déclarer, et pourquoi en int64?          Dim TempsTotal As TimeSpan = TemporisateurTimer 'pourquoi ne pas te servir directement de TemporisateurTimer, tu perds du temps d'exécution         Dim TempASoustraire As TimeSpan = pTemp 'idem          Dim TempRestant As TimeSpan = TempsTotal - TempASoustraire 'TempRestant pourrait-être une variable globale à la classe pour là encore gagner en temps d'exécution          TempRestantStr = ConvertirTimeSpanVersChaine(Contexte, TempRestant) 'cette fonction est elle vraiment utile, un timespan sait se convertir en chaine tout seul, https://docs.microsoft.com/fr-fr/dotnet/standard/base-types/custom-timespan-format-strings                   Return TempRestantStr      End Function




    Et puis ceci
             While Actif             TemporisateurEcoule = TempUtil.Elapsed             Me.txtTempEcoule.Text = ConvertirTimeSpanVersChaine(Contexte, TemporisateurEcoule)             Me.txtDecompte.Text = CalculDuDecompte(Contexte, TemporisateurEcoule)             Chaine = Me.txtTempEcoule.Text             Application.DoEvents() 'en perte de temps y pas pire          End While


    Un doevents bloque ton application, dis à windows fait ce que tu veux et rends mois la main quand tu veux, donc là autant te dire, que windows des millisecondes il ne se prive pour s'en octroyer.

    Si tu veux faire un timer toi même, la meilleure solution est de mettre ton while dans un thread avec éventuellement un Sleep de n millisecondes.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

Je comprends ton point de vue ...
Si Medom a des questions je lui répondrai selon mes disponibilités ...
Si mon code te déplait, je suis désolé ...
Personnellement, je préfère un code explicit ...

K

Reply
réponses:
  • auteur

    Bonjour,

    Les méta instructions qui précèdent les signatures ne sont présentent que parce que j'utilise des extraits de code "snippets" qui insère une classe par défaut dans un projet quelconque.

    Le demandeur peut ignorer cet exemple si celui-ci ne lui convient pas.
    Si ce code est considéré comme nuisant, un modérateur peut aussi le retirer.

    K

  • auteur

    Il n'est ni question de me plaire ou même de nuire à qui que ce soit, je te proposais juste des pistes d'améliorations, d'être constructif.
    A toi de voir si tu veux en tenir compte ou pas.
    Par exemple je ne suis pas anti DoEvents, si tu cherches un peu tu trouveras des centaines de posts sur tous les forums, qui disent qu'il ne faut pas s'en servir sans autre forme de procès. Il y en a quelques uns qui expliquent pourquoi c'est "dangereux" et peu performant.
    Dans ton cas, faire un chronomètre à la milliseconde et en rendre au moins 30 (c'est un minimum) au processeur à chaque boucle, en terme de performance c'est pas cohérent. Si tu veux afficher le 1/10 de secondes, je n'ai plus rien à en dire.

    Pour mon travail aussi j'utilise des snipets, mais pas pour répondre sur le forum.
    Le code utile pour la question posée arrive à la ligne 156, tout ce qui est avant, ne lui est pas encore accessible, c'est un coup à le dégouter.
    Et ça n'est pas du tout explicite pour un débutant.

    D'ailleurs, pour l'être vraiment, il manque quelques commentaires aux lignes clés.

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed