0
votes

Configurez une zone de texte qui accepte uniquement une plage de temps

J'ai besoin d'insérer dans une zone de texte les intervalles de temps avec le format HH: mm / hh: mm (par exemple, 08: 00/13: 00 , 14: 00/18: 00 ) Pour définir les heures de réception d'un utilisateur spécifique.

Comment puis-je faire cela en entrant également une commande sur le temps entré (si j'entre 25: 60/70: 90 , il ne doit pas être accepté car le calendrier n'existe pas). Merci d'avance!


4 commentaires

L'entrée devrait donc être une valeur de temps valide 00:00 - 23:59 et vous devez également valider les entrées? (C'est-à-dire: la deuxième fois ne devrait pas être inférieure à la première fois?)


@Steve "La deuxième fois ne devrait pas être inférieure à la première fois" Que se passe-t-il si leur poste s'étend de minuit?


@Steve, merci pour la réponse, pour le moment je dois contrôler seulement la valeur


Vous pouvez utiliser 4 contrôles DateTimePicker (avec CustomFormat HH: mm ) et déterminez le Mindate et MAXDate (en utilisant uniquement l'heure) du deuxième couple Lorsque la valeur du premier couple change, qui est notifiée par l'événement ValueChaged.


3 Réponses :


0
votes

Vous pouvez utiliser Expressions régulières pour cette validation. Vous auriez besoin d'utiliser un motif comme celui-ci: xxx

< fort> Essayez-le en ligne .

Tout d'abord, ajoutez la référence suivante: xxx

alors, en supposant qu'il s'agisse d'une winforms Projet, vous devrez utiliser l'événement textbox.validant comme suit: xxx


2 commentaires

Merci pour la réponse, j'ai essayé et la validation des données fonctionne. Comment puis-je contrôler la frappe de sorte que: / et - apparaissent par eux-mêmes lorsque je tape? Exemple: lorsque je tiens l'heure, je voudrais: apparaître seul pour que je puisse écrire les minutes directement. Merci d'avance!


@Giuliaturco Vérifiez la section "Modifier" dans Mon autre réponse .



0
votes

Une autre option serait d'utiliser Timespan. TryparseeXact code> . Cela vous donnera le même résultat et il vous permettra également d'obtenir facilement les valeurs de temps comme Timespan code> S afin que vous puissiez les utiliser pour des calculs ultérieurs ou pour les stocker quelque part, par exemple.

Private Sub MaskedTextBox1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles MaskedTextBox1.Validating
    Dim validRange As Boolean = False
    Dim time1, time2 As TimeSpan

    Dim timeRanges As String() = MaskedTextBox1.Text.Split("/"c)
    If MaskedTextBox1.MaskCompleted Then
        If TimeSpan.TryParseExact(timeRanges(0), "hh\:mm",
                                  Globalization.CultureInfo.InvariantCulture, time1) AndAlso
           TimeSpan.TryParseExact(timeRanges(1), "hh\:mm",
                                  Globalization.CultureInfo.InvariantCulture, time2) Then
            validRange = True
        End If
    End If

    If validRange Then
        ' Use `time` and `time2` for anything you want.
    Else
        ' TODO: Indicate to the user that they entered an invalid input.
        e.Cancel = True
    End If
End Sub


0 commentaires

0
votes

Voici un exemple qui retournera une liste (de tispan) Si quatre heures valides sont trouvées dans le format que vous avez spécifié. C'est un peu clunky, par conception, vous pouvez donc voir exactement les étapes prises pour que toutes les pièces soient valides. Une fois que vous avez ces quatre fois en retard comme TIMPANS, vous pouvez les traiter pour voir si elles ont un sens ensemble comme un "décalage": xxx


0 commentaires