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

Windows Forms Discussion :

Perte du mask avec MaskedTexBox


Sujet :

Windows Forms

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 Perte du mask avec MaskedTexBox
    Bonjour à tous,

    J'ai un problème bizarre que je rencontre pour la première fois.

    J'ai une application assez complexe avec plein de fenêtre et donc, pour éviter de réinitialiser leurs contrôles à la mains à chaque ouverture, j'ai créé une petite procédure dont voici le code.

    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
    23
    24
    25
    26
    27
     
        Public Sub ResetCtl(ByRef Ctl As Control)
            Select Case Ctl.GetType.ToString
                Case "System.Windows.Forms.TextBox"
                    Dim tb As TextBox = Ctl
                    tb.Text = ""
                Case "System.Windows.Forms.ComboBox"
                    Dim cb As ComboBox = Ctl
                    cb.SelectedIndex = -1
                Case "System.Windows.Forms.MaskedTextBox"
                    Dim mtb As MaskedTextBox = Ctl
                    mtb.Text = ""
                Case "System.Windows.Forms.NumericUpDown"
                    Dim nud As NumericUpDown = Ctl
                    nud.Value = 0
                Case "System.Windows.Forms.GroupBox"
                    Dim gb As GroupBox = Ctl
                    For Each child As Control In gb.Controls
                        ResetCtl(child)
                    Next
                Case "POS." & Ctl.Name
                    Dim frm As Form = Ctl
                    For Each child As Control In frm.Controls
                        ResetCtl(child)
                    Next
            End Select
        End Sub
    A priori, il fonctionne parfaitement. Mais j'ai un souci avec les MaskedTextBox. Lors du première affichage de la fenêtre, aucun souci, le masque est initialisé correctement. Quand j'appuie sur cancel (c'est une boite de dialogue) sans avoir encodé qqch dans le controle et qu'ensuite je réouvre cette fenêtre, c'est à ce moment que le masque du controle a disparu.

    J'ai remarqué que si j'avais encodé qqch avant de cliquer sur cancel, quand je reviens, alors mon masque est bien présent.
    J'ai aussi remarqué que lorsque le masque a disparu, si je vais dans le contrôle, lors de la frappe du premier caractère valide, le masque réapparait.

    J'ai essayé diverses méthode pour réinitialisé le texte de ce contrôle. Ici je vous montre le code avec mtb.Text = "" mais j'ai essayé .Clear et .ResetText. Dans tous les cas, le résultat est le même. J'ai tenté de faire un refresh du contrôle après l'avoir réinitialisé mais cela n'a rien changé.

    Quelqu'un aurait-il une idée de ce qu'il passe ici ?

    Merci d'avance.

    Griftou.

  2. #2
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 184
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 184
    Par défaut
    Bonjour.

    A priori, cela devrait fonctionner.

    Donc le probléme doit être ailleurs.

    Comment et quand appelles-tu cette sub ?

    D'autre part, évite de tester le nom des types, il y a moyen de faire bien plus propre... (du genre IsAssignableFrom qui permet en plus de prendre en compte l'heritage).

    Cdt.

  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
    Citation Envoyé par olsimare Voir le message
    Bonjour.

    A priori, cela devrait fonctionner.

    Donc le probléme doit être ailleurs.

    Comment et quand appelles-tu cette sub ?

    D'autre part, évite de tester le nom des types, il y a moyen de faire bien plus propre... (du genre IsAssignableFrom qui permet en plus de prendre en compte l'heritage).

    Cdt.
    J'appelle cette sub dans l'évènement Load de chaque form.
    Pour le IsAssignableFrom, je ne connais pas du tout. J'ai plus ou moins appris le .NET sur le tas et avec le tuto de Philippe Lasserre.

    Ce tuto est nickel mais dès qu'il s'agit d'un truc un peu plus poussé, ce n'est pas abordé (ce qui en fait est normal) et dans la MSDN de microsoft, je dois avouer que je n'y comprends pas souvent grand chose.

    Tu m'avais déjà conseillé le AddMessageHandler pour une autre topic (auquel je vois que tu as répondu et que je vais m'empresser d'aller lire) mais avec ce j'ai trouvé sur le net (principalement MSDN), je ne m'en sors pas du tout.

    Conclusion, je fait avec ce que j'ai "sous la main". Mais je vais aller voir ce "IsAssignableFrom".

    Merci de me consacrer du temps en tout cas !

    Griftou.

  4. #4
    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
    *Newsflash*

    Mon collègue vient d'avoir le même comportement étrange que moi.

    Je n'ai pas encore eu le temps de regarder le "IsAssignableFrom" car on vient de me filer (encore) un nouveau projet.

    Personne d'autre n'a jamais eu ce genre de comportement ?

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 151
    Par défaut
    Si j'ai bien compris tu as un Maskedtextbox1 de la forme suivante :
    (exemple un Maskedtextbox1 d'heure) __:__ ???

    et dans un cas particulier quand tu reviens sur ta form tu as n'a plus __:__ ? et lorsque tu commences à tapper qqch dans la Maskedtextbox1 tu revois apparaitre __:__ ?

    J'utilisa plein de Maskedtextbox comme toi et je n'ai jamais eu ce problème

    Essay de voir du coté de la propriété du Mask de ton Maskedtextbox ...

  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
    C'est presque ça.

    J'ai un maskedtextbox nommé tbHeure pour la facilité avec comme masque "99:99".

    Ce qui donne ceci à l'affichage : __:__

    Dans l'event load de la form, il est normal de réinitialisé la propriété text de tbHeure pour ne pas avoir des déchets d'un ancien encodage. Je fais donc :
    Et c'est là que ça devient tordu !

    Si le champ avec été rempli (même de manière incorrecte genre 88:88 ou 1_:__), je retrouve bien alors "__:__" à l'affichage. Par contre, s'il n'y avait rien, j'ai alors " : " lors de l'affichage (disparition des cractères spécifiés dans la propriété "prompt" du contrôle.

    Encore plus tordu, lors du premier affichage de la form, aucun souci. Ce n'est que lors des affichages qui viendront après (si la condition du paragraphe précédent est remplie) que le problème survient.

    Vraiment bizarre.

Discussions similaires

  1. [GD] Perte de qualité avec ImageCreateFromJPEG
    Par julien.63 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/10/2006, 18h14
  2. Pertes de mémoire avec Rave
    Par stepschn dans le forum Delphi
    Réponses: 8
    Dernier message: 15/10/2006, 11h18
  3. Perte de session avec une popup sous IE
    Par ideal dans le forum Langage
    Réponses: 20
    Dernier message: 18/08/2006, 09h26
  4. Perte de données avec requete UNION
    Par askan dans le forum Access
    Réponses: 3
    Dernier message: 02/02/2006, 15h49
  5. Installation et perte d'icône avec Firebird
    Par SebCBien dans le forum Applications et environnements graphiques
    Réponses: 22
    Dernier message: 31/10/2004, 16h46

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