Compte à rebours vb.net
medom7
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
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 :
Je vous remercie
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
A voir également:
- Compte à rebours vb.net
- Créer un compte google - Guide
- Installer windows 10 sans compte microsoft - Guide
- Comment créer un compte gmail - Guide
- Comment savoir qui regarde mon compte facebook - Guide
- Créer un compte instagram sur google - Guide
4 réponses
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.
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 https://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.
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 çaString.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 https://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.
Bonjour,
Pour le plaisirs de programmer, voici un autre exemple ou le timer est réalisé maison :-)
K
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
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
En plus, tu affiches des millisecondes, mais tu en perds partout.
Un exemple ici
Et puis ceci
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.
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.
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
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
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
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
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.
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.