Limiter masked textboox a certains caractere [Résolu]

Signaler
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
-
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
-
Bonjour

J'ai cherché mais sans succes

Quelqu'un sait-il s'il est possible et comment d'utiliser un maskedtextbox pour limiter l'entrée a certain caracteres

Exemple trivial :

O ou N  pour Oui / Non (Yes / No)

J'ai lu et relu la doc et je n(ai rien vu qui permettait cela
Si c'est possible c'est vraiment bien caché
Si c'et pas possible c'est vraiment tres dommage et incompréhensible

Mais dans les deux cas c'est dommage qu'une possibilité aussi triviale ne soit pas mise ern évidence

7 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
La MaskedTextBox n'est pas un Control très bien conçu, personnellement je ne l'ai presque jamais utilisé!
Cela dit, on peut lui associé des expressions régulières, donc ...

<hr />
-My Blog-
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
5
Tu peux controler les touches frappées dans ta textbox via l'evènement KeyPress
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
5
C'est bien ce que je craignais !
Dans ce cas je considere que le maskedtextbox est completement idiot et inutile

Je vais reprendre une fonction que j'ai écrite il y a vingt ans pour controler des masque d'ecran en C et VB
et qui faisait bien plus que le malheureux  masketextbox actuel

A mon avis il on du confier le concept de cela a un ingénieur qui n'a jamais utilisé un clavier !
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
5
Salut Bidou

Ben non justement je croyais, mais on ne peut PAS lui associer des expressions régulieres
C'est encore plus mauvais que tu ne le pense
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
Ha oui on dirait bien que tu as raison...
Le mieux c'est encore de faire une validation à la main (Validator pour le web, regex avec textbox pour les winForms)

<hr />
-My Blog-
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
tu peux toujours te servir de l'une de mes sources pour les valider : http://www.csharpfr.com/codes/WINDOWS-FORMS-VALIDATORS_43575.aspx

Sinon, je rejoins Bidou, ce contrôle est une pure d***e... impossible de saisir quelque chose correctement !

Sébastien FERRAND (blog)
Consultant Sénior
[Microsoft Visual C# MVP]
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
5
Merci a tous

J'ai aussi reçu une classe dérivée de TextBox (RegexTextBox) de Tomlev sur développez.com

Il a associé une regular expression sur TextBox je n'ai pas encore testé mais c'est en tout cas plus malin que l'original

    public class RegexTextBox : TextBox
    {
        public RegexTextBox()
        {
            regexPattern = ".*";
            regex = new Regex("^" + regexPattern + "$");
        }

        protected string regexPattern;
        protected Regex regex;

        public string RegexPattern
        {
            get { return regexPattern; }
            set
            {
                if (value != regexPattern)
                {
                    regexPattern = value;
                    regex = new Regex("^" + regexPattern + "$");
                }
            }
        }

        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (IsInputChar(e.KeyChar) && e.KeyChar >= (char)32)
            {
                string newText = this.Text + e.KeyChar;
                if (!regex.IsMatch(newText))
                {
                    e.Handled = true;
                }
            }
            base.OnKeyPress(e);
        }

        [Browsable(false)]
        public override bool Multiline
        {
            get
            {
                return false;
            }
            set
            {
                if (value)
                    throw new NotSupportedException("RegexTextBox cannot be multiline");
            }
        }
    }