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 :

Limiter la taille d'une propriété de type string


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut Limiter la taille d'une propriété de type string
    Bonjour,

    J'aurais voulu savoir s'il était possible de limiter le nombre de caractères d'une propriété de type String dans une classe custom ?

    Ou bien faut-il obligatoirement passé par un tableau de caractères ?

  2. #2
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut
    Bonjour Kropernic.

    La propriété Length d'un String devrait pouvoir vous aider.

    Cordialement.

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Oui je pourrais faire un test sur la longueur dans le constructeur de le setter de la propriété. Ca je le savais bien ^^.

    Ce que je demandais, c'est s'il était possible de préciser la longueur directement dans la déclaration de la propriété.

    Quelque chose dans ce genre-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Class MaClass
     
    Public Property MaPropriete As String XXXXXXXX
     
    End Class
    où XXXXXXXX serait un paramètre pour la longueur.
    Du coup, pas de test à faire. Si la chaine passée au setter de la propriété, ça lève une exception ou bien ça la tronque.

    Je pensais avoir été clair pourtant

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Par défaut
    Salut Kopernic,

    Si tu recupère ton string depuis une textebox tu peux limiter la taille dans cette derniere, sinon il semblerait que non.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par chaparo Voir le message
    Si tu recupère ton string depuis une textebox tu peux limiter la taille dans cette derniere, sinon il semblerait que non.
    +1

    Une autre possibilité c'est de vérifier dans le Setter que la longueur maximale de la chaîne n'est pas dépassée et déclencher une exception si c'est le cas.

    Mais je préfère de loin la méthode proposée par Chaparo.

  6. #6
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    J'en conclus que la réponse à ma question est non.

    Merci.

  7. #7
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    Mais je préfère de loin la méthode proposée par Chaparo.
    c'est trop beau pour etre vrai

  8. #8
    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,

    Je fais remonter ce post car je viens de trouver une solution qui pourrait peut-être répondre à la question gràce aux questions et recherches de 105rn2.
    Voici le lien : Limitation taille

    Citation Envoyé par Kropernic Voir le message
    Ce que je demandais, c'est s'il était possible de préciser la longueur directement dans la déclaration de la propriété.

    Quelque chose dans ce genre-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Class MaClass
     
    Public Property MaPropriete As String XXXXXXXX
     
    End Class
    où XXXXXXXX serait un paramètre pour la longueur.
    Du coup, pas de test à faire. Si la chaine passée au setter de la propriété, ça lève une exception ou bien ça la tronque.
    Il faut intégrer les classes EntityValidationResult, EntityValidator, ValidationHelper au projet.
    Si la chaîne affectée est trop longue une erreur est tracé, mais il faut la tester. Tu peux peut-être modifier ces classes pour tronquer la chaîne.
    Dans tous les cas plus besoin de tester toutes les propriétés, l'appel a la méthode "ValidateEntity" suffit pour connaître les erreurs.

    Espérant que celà apporte une réponse satisfaisante à ton problème.

    A+, Hervé.
    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.

  9. #9
    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
    Je viens de faire un petit test en utilisant directement l'appel à "ValidateEntity" dans la classe pour générer une exception.
    Par contre, il faut forcement un appel à une méthode de vérification, mais tous cela est générique et interne à la classe.
    Ex:
    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
    Public Class clsDataJour
        Private mAbreviation
        <Display(Name:="Abréviation")> <Required()> <StringLength(8, ErrorMessage:="L'Abréviation ne peut excéder 8 caractéres")>
        Public Property Abreviation As String
            Get
                Return mAbreviation
            End Get
            Set(ByVal value As String)
                mAbreviation = value
                VerifPropriete()
            End Set
        End Property
     
        Private Sub VerifPropriete()
            Dim validationResult = ValidationHelper.ValidateEntity(Of clsDataJour)(Me)
            If validationResult.HasError Then Throw New System.Exception(validationResult.Errors(0).ErrorMessage)
        End Sub
    Utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Dim DonneesJour As clsDataJour = New clsDataJour()
            Try
                DonneesJour.Abreviation = "SuiviJour" ' exception levée
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
    En plus, avec cette méthode, il est possible de définir plusieurs types de contrôle sur la propriété, et tout est géré en automatique derrière. (A creuser, voir si l'on ne peut pas indiquer la méthode de vérif dans les annotations)
    A+, Hervé.
    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.

  10. #10
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut
    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
    Public Class Acceuil
        Private _Curiosité As String
     
        Public Property Curiosité(ByVal LongueurMax As UShort) As String
            Get
                Return _Curiosité
            End Get
            Set(ByVal Vlr As String)
                If Vlr.Length > LongueurMax Then Beep() Else _Curiosité = Vlr
            End Set
        End Property
     
        Private Sub Acceuil_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Curiosité(5) = "Anticonstitutionnellement"
            MsgBox(Curiosité(0))
        End Sub
     
    End Class

  11. #11
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Il est possible d'utiliser des attributs pour ceci:
    http://msdn.microsoft.com/en-us/libr...v=vs.100).aspx
    A noter qu'il me semble que ca ne marche pas dans toutes les technologies (je l'utilise sur Silverlight).

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/02/2011, 11h52
  2. Limiter la taille d'une zone de texte
    Par amka dans le forum Access
    Réponses: 6
    Dernier message: 25/08/2006, 14h42
  3. Limiter la taille d'une Text Box
    Par therewillbealight dans le forum Access
    Réponses: 1
    Dernier message: 14/07/2006, 23h43
  4. Limiter la taille d'une ou plusieurs bases de données
    Par Thierry8 dans le forum Administration
    Réponses: 7
    Dernier message: 12/03/2006, 23h51
  5. Réponses: 2
    Dernier message: 18/10/2003, 14h42

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