IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Convertir durée saisie dans une MaskedTextBox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut Convertir durée saisie dans une MaskedTextBox
    Bonjour,

    En VB.Net sous VS 2012, je voudrais savoir quel est le meilleur moyen de récupérer une durée saisie dans un MaskedTextBox ayant comme mask "00:00:00" (donc sous la forme hh:mm:ss) pour la convertir en secondes ?
    Le champs de saisie est facultatif et la durée saisie ne peut contenir que des minutes et secondes (heures facultatives)

    Merci.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Dim h As Integer = 0
            If IsNumeric(MaskedTextBox1.Text.Split(":")(0)) Then
                h = Integer.Parse(MaskedTextBox1.Text.Split(":")(0))
            End If
            MessageBox.Show((New TimeSpan(h, Integer.Parse(MaskedTextBox1.Text.Split(":")(1)), Integer.Parse(MaskedTextBox1.Text.Split(":")(2)))).TotalSeconds)
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut
    Merci.

    Finalement, il a été décidé de définir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mskDuree.ValidatingType = GetType(System.DateTime)
    , d'utiliser l'évènement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mskDuree_TypeValidationCompleted
    et de mettre une valeur "nulle" par défaut

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut
    Je rouvre le sujet car ca ne pouvait pas marcher ... et ca ne marche pas

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par Hobbi1 Voir le message
    Je rouvre le sujet car ca ne pouvait pas marcher ... et ca ne marche pas
    Oui,
    et qu'est-ce qui ne fonctionne pas ?
    Quel est le message d'erreur ?
    Quel code utilisez-vous ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Private Sub frmDates_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.MaskedTextBox1.ValidatingType = GetType(System.DateTime)
            MaskedTextBox1.Text = "00:00:00" ' cela oblige l'utilisateur a ne pas être en insert pour saisir
        End Sub
        Private Sub MaskedTextBox1_TypeValidationCompleted(ByVal sender As Object, ByVal e As TypeValidationEventArgs) Handles MaskedTextBox1.TypeValidationCompleted
            If (Not e.IsValidInput) Then
                MessageBox.Show("Heure invalide")
                'e.Cancel = True
            Else
                Dim h As Integer = 0
                If IsNumeric(MaskedTextBox1.Text.Split(":")(0)) Then h = Integer.Parse(MaskedTextBox1.Text.Split(":")(0))
                MessageBox.Show((New TimeSpan(h, Integer.Parse(MaskedTextBox1.Text.Split(":")(1)), Integer.Parse(MaskedTextBox1.Text.Split(":")(2)))).TotalSeconds)
            End If
        End Sub
    fonctionne très bien chez moi.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut
    Ce qui ne marche pas c'est le code utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ValidatingType = GetType(System.DateTime)
    En effet, des valeurs comme
    01:54:25
    ne marchent pas. En fait, le 2ème couple de chiffres ne doit pas être supérieur à 12 car VB s'attend à avoir un mois.

    J'ai trouvé une solution qui va être quelque chose comme ça (après avoir enlevé les MessageBox bien sûr)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    If mskDuree.MaskCompleted Then
         MessageBox.Show("complet")
    Else
         If mskDuree.Text = "  :  :" Then
              MessageBox.Show("vide")
         ElseIf mskDuree.Text.Length = 8 And mskDuree.Text.Substring(0, 2) = "  " Then
              mskDuree.Text = "00" & mskDuree.Text.Substring(3, 5)
              MessageBox.Show("complété")
         ElseIf mskDuree.Text.Length = 8 And mskDuree.Text.Substring(0, 1) = " " Then
              mskDuree.Text = "0" & mskDuree.Text.Substring(1, 7)
              MessageBox.Show("complété")
         Else
              MessageBox.Show("'" & mskDuree.Text & "'")
         End If
    End If
     
    Dim intervalVal As TimeSpan
    If TimeSpan.TryParse(mskDuree.Text, intervalVal) Then
        MessageBox.Show(CStr(TimeSpan.Parse(mskDuree.Text).TotalSeconds))
    Else
        MessageBox.Show("format non valide =" & intervalVal.ToString)
    End If

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par Hobbi1 Voir le message
    Ce qui ne marche pas c'est le code utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ValidatingType = GetType(System.DateTime)
    En effet, des valeurs comme ne marchent pas. En fait, le 2ème couple de chiffres ne doit pas être supérieur à 12 car VB s'attend à avoir un mois.
    Ben pourtant (les : dans la chaîne permette à vb de savoir qu'il sagit d'une heure ; voir image (résultat avec mon code) en bas du message)

    [Edit]
    Sinon il ne faut pas placer la chaîne "00:00:00" en init et vérifier sur l'évènement Leave si la valeur heure est numérique sinon c'est le masque et dans ce cas mettre les zéro. Puis laisser la validation classique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        Private Sub frmDates_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.MaskedTextBox1.ValidatingType = GetType(System.DateTime)
        End Sub
        Private Sub MaskedTextBox1_TypeValidationCompleted(ByVal sender As Object, ByVal e As TypeValidationEventArgs) Handles MaskedTextBox1.TypeValidationCompleted
            If (Not e.IsValidInput) Then
                MessageBox.Show("Heure invalide -" & MaskedTextBox1.Text)
            Else
                Dim h As Integer = 0
                If IsNumeric(MaskedTextBox1.Text.Split(":")(0)) Then h = Integer.Parse(MaskedTextBox1.Text.Split(":")(0))
                MessageBox.Show((New TimeSpan(h, Integer.Parse(MaskedTextBox1.Text.Split(":")(1)), Integer.Parse(MaskedTextBox1.Text.Split(":")(2)))).TotalSeconds)
            End If
        End Sub
        Private Sub MaskedTextBox1_Leave(sender As System.Object, e As System.EventArgs) Handles MaskedTextBox1.Leave
            If Not IsNumeric(MaskedTextBox1.Text.Split(":")(0)) Then MaskedTextBox1.Text = "00" & MaskedTextBox1.Text.Substring(3, 5)
        End Sub
    [/Edit]
    Images attachées Images attachées  
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/06/2005, 17h51
  2. [PowerBuilder] Saisie dans une colonne d'une DW
    Par SandraG dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 16/05/2005, 10h17
  3. Refresh de page initiale après saisie dans une popup
    Par muppetshow dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 16/03/2005, 13h21
  4. Réponses: 2
    Dernier message: 17/02/2005, 01h00
  5. saisie dans une fenetre de service
    Par gord's dans le forum Composants VCL
    Réponses: 4
    Dernier message: 05/11/2003, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo