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

Visual Studio Discussion :

Comment interdire/autoriser l'écriture en TextBox?


Sujet :

Visual Studio

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Comment interdire/autoriser l'écriture en TextBox?
    Bonjour,

    en tant que débutant je développe une petite interface pour automatiser des outils commerciaux et j'aimerais vos conseils pour les points suivants:

    - Comment faire pour que mon programme interdise de mettre une mauvaise date dans une masked textbox (antérieure a la date du jour ou non valide genre 32/21/2100)?
    - Comment interdire la modification du texte dans une textbox (je fais un choix dans une combobox qui se répete ensuite dans une textbox qu'on ne peut pas changer, si je choisi "autre" je peux entrer moi meme le texte dans cette meme TextBox)?
    - Comment ne pas faire apparaitre de choix par defaut dans une combobox mais interdire un choix nul ou l'écriture manuelle dans celle-ci?

    Tous vos conseils seront les bienvenus!!!

    Loke

  2. #2
    Membre actif Avatar de oussi
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 192
    Points : 290
    Points
    290
    Par défaut
    Salut,

    1 - Tu utilise un DateTimePicker et lors de l'événement SelectedDateChanged tu fait une vérification :
    Si (DateTimePicker.Value>System.Datetime.Now) alors
    DateTimePicker.Value=System.Datetime.Now
    FinSi
    2 - Tu peux utiliser la propriété ReadOnly, et dans l'événement selectedtextchanged de la combo mettre ceci :
    Si (combobox.SelectedText = "autre")alors
    MaTextbox.readonly = false
    sinon
    MaTextbox.readonly = true
    FinSi
    3 - Non-affichage du choix par défaut : Dans le load du formulaire tu écrit
    combobox.selectedindex = -1
    Pour interdire l'écriture il n'y a pas de propriété (à ma connaissance) qui le permettent (Readonly pour les textbox) mais tu peux vérifier si l'index sélectionné dans la combo est supérieure est diffèrent de -1

    @++
    Programmer c'est comme dessiner.

  3. #3
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Bonjour,

    Je suis plutôt de l'avis de oussi, néanmoins voilà quelques précisions utiles:

    Pour ton premier point, je suggèrerais en effet un DateTimePicker, il ne prend pas plus de place qu'une TextBox sur le Formulaire, par contre j'utiliserais plutôt les propriétés MinDate et MaxDate (si besoin) pour spécifier les bornes de la plage de dates valides, et l'évènement ValueChanged (et pas SelectedDateChanged) pour d'autres types de vérification (interdire si la date sélectionnée est un dimanche par exemple)

    Pour le deuxième point, une manière plus flexible de modifier la capacité en écriture pour la TextBox est d'écrire ceci:
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub ComboBox1_SelectionChangeCommitted(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
        TextBox1.ReadOnly = (String.Compare(ComboBox1.SelectedItem.ToString, "autre", StringComparison.InvariantCultureIgnoreCase) = 0)
    End Sub
    Je me sers de l'évènement SelectionChangeCommitted qui se produit après la sélection d'une valeur lors de la fermeture de la liste déroulante (attention si la zone de saisie du ComboBox est utilisée pour saisir la même valeur l'évènement ne sera pas déclenché, il le sera par contre, si l'on fais défiler les valeur à l'aide des flèches du clavier)
    J'utilise la méthode String.Compare car elle possède plusieurs surcharges qui selon le besoin peuvent s'avérer utile (dans mon exemple je compare les chaines sans tenir compte de la case [minuscules-Majuscules] ou de la culture [informations sur la langue, les formats de dates ou numériques etc.])
    Note aussi l'absence de test avec If, car écrit comme ceci (avec = 0 pour vérifier l'équivalence des chaines) cela renvoie un Boolean type qu'attend la propriété ReadOnly du TextBox (même si le if marche tout aussi bien)

    Enfin pour éviter la possibilité de saisir dans la ComboBox, il faut placer sa propriété DropDownStyle sur DropDownList et utiliser ce qui est dit par oussi pour le SelectedIndex. Pour ce qui est d'interdire un choix nul, j'imagine que c'est lors de la validation (clic sur un bouton) dans ce cas soit lors de l'évènement click de ce bouton, vérifier que ce SelectedIndex est différent de -1 ou, (moi je préfère mais c'est moi ) mettre la propriété Enabled de ce bouton à False (soit par le designer, soit dans l'évènement Load) ce qui désactivera le bouton, et passer cet Enabled à True lors du SelectionChangeCommitted par exemple (pas besoin de re-tester à chaque fois, une fois qu'une valeur a été sélectionnée, on ne peut plus revenir à l'état "selection nulle" avec l'interface)

    En espèrant que cela ait répondu à tes questions
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  4. #4
    Membre actif Avatar de oussi
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 192
    Points : 290
    Points
    290
    Par défaut
    Salut sehnsucht,

    Merci pour ces astuces utiles

    @++
    Programmer c'est comme dessiner.

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Quand le control n'a pas de propriété ReadOnly, comme les ComboBox, on peut mettre sa propriété "Enabled" à false.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/03/2008, 11h22
  2. [VBA-E] ré-autoriser écriture sur TextBox
    Par repié dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/03/2006, 15h35
  3. [TForm] Comment interdire le redimmensionnement ?
    Par portu dans le forum Composants VCL
    Réponses: 6
    Dernier message: 08/02/2005, 20h53
  4. Dbgrid : Comment interdire Suppression de Ligne
    Par Francis dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/11/2004, 08h31
  5. Comment interdire la fermeture d'une fiche empilée ?
    Par psau dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/07/2004, 14h01

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