Try catch textbox vide

Résolu
Signaler
Messages postés
4
Date d'inscription
jeudi 31 décembre 2009
Statut
Membre
Dernière intervention
2 janvier 2010
-
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
-
Bonjour,

je développe des petites applications pour mieux apprendre le c#, et je me posais la question si existait une exception TRY CATCH qui gère la condition si un "textbox" est vide.

Exemple:
j'ai un FORM composer de plusieurs "textbox" et je voulais effectuer une opération seulement si tous mes textbox sont remplis.
j'ai essayé avec les "listbox" ,les if(textbox1.Text !="" ....), et autres méthodes et ça marche, Mais je m'interroge si y'a pas une autre alternative (genre try cath).

Peut être je suis naïf vu que je suis débutant, mais j'ai confiance en visual studio et comme on dit un bon programmeur est un programmeur feignant :) (j'ai la version 2008).

J'attends vos conseils.
Merci.
A voir également:

9 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
37
Salut,

Comme le nom l'indique les try catch et les exceptions sont fait pour des cas excepptionnel. (qui normalement ne devrait pas se produire)

Genre argument à null, division par zero, operation impossible.

Il faut eviter de gerer par une exception les controles de validité des saisie. Car les exceptions sont couteuse en mémoire et temps de calcul, recuperation de la stack ....

Pour ton cas, voici quelques méthodes à utiliser.

Tu est en windows forms,
la methode simple est de faire une boucle

foreach (Control ctrlButton in this.Controls)
{
  if (ctrlButton is TextBox && ctrlButton.Visible == true)
  {
    if(String.isNullOrEmpty(ctrButton as TextBox).Text)
    {
        MessageBox.Show(String.Format("Error on {0}",ctrButton.Name));
        break;//sortie pas propre sur le premier controle en erreur
    }
  }
}


Il est possible de passer par des errors provider
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Dans la mesure où
- Il n'est pas possible de déterminer à l'avance combien de textbox tu mettra sur ton écran
- Il est probable qu'il n'y ai pas que des textbox sur ton écran
- Il peut être tout à fait normal qu'un textbox soit vide dans le contexte d'un logiciel quelconque
- .......
- .......
- .......

JE ne pense pas qu'une telle fonction existe. En tout cas, je ne la connais pas. Il faut donc que tu te code le test toi-même.

Ceci dit, si le fait qu'un de tes textbox soit vide provoque une exception dans le traitement que tu fais, un Try...Catch peut effectivement intercepter cette exception.
Mais un codage propre veut que dans ce cas, on ne laisse pas l'exception se lever, mais qu'au contraire, on vienne vérifier avant de lancer le traitement que les textbox nécessaires soient bien remplies.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
4
Date d'inscription
jeudi 31 décembre 2009
Statut
Membre
Dernière intervention
2 janvier 2010

C'est exactement ça, les conditions varient selon l'usage, donc j'opte souvent pour un codage ou je test moi même comme tu dis -casy-, mais j'avoue que des fois je bloque, par exemple j'ai une application ou j'ai 10 "textbox", l'utilisateur est obligé de tous remplir pour lancer une opération, sauf que y'a des utilisateurs qui ont accès à seulement 5 "textbox" et d'autres à 7 ou 8 ..., et au lieu de générer dynamiquement les textbox j'ai choisi (Mauvais choix :)) de jouer avec la visibilité dans les propriétés du contrôle, du coup j'arrive pas à standardiser mon test sachant que tous les "textbox" doivent être remplies puisque les contrôles invisibles je les remplis par défaut.
La je suis entrain de lire sur internet des docs sur les TRY CATH afin de bien captiver l'utilité. j'ai du chemin à faire :)
Merci
Messages postés
4
Date d'inscription
jeudi 31 décembre 2009
Statut
Membre
Dernière intervention
2 janvier 2010

Merci nhervagault,
ça répond en grande partie à mes attentes, j'ai testé ta méthode et ça fonctionne afficacement.

je corrige rapidement le code pour les autres visiteurs :

foreach (Control ctrlButton in this.Controls)
            {
                if (ctrlButton is TextBox && ctrlButton.Visible == true)
                {
                    if (String.IsNullOrEmpty((ctrlButton as TextBox).Text))
                    {
                        MessageBox.Show(String.Format("Error on {0}", ctrlButton.Name));
                        break;//sortie pas propre sur le premier controle en erreur
                    }
                }
            }


Merci à tous Bonne Année 2010.
Messages postés
2
Date d'inscription
samedi 2 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2010

Bonjour,

je suis aussi débutant, je veux utiliser ce code mais ca marche pas quand mes textbox sont dans des groupbox, on dirait que la boucle parcourt les groupbox mais pas ce qui il y a dedans.

Comment faire svp.

Merci.
Messages postés
4
Date d'inscription
jeudi 31 décembre 2009
Statut
Membre
Dernière intervention
2 janvier 2010

Essaie ça -sawII-

foreach (Control ctrlButton in groupBox1.Controls)
            {
                if (ctrlButton is TextBox && ctrlButton.Visible == true)
                {
                    if (String.IsNullOrEmpty((ctrlButton as TextBox).Text))
                    {
                        MessageBox.Show(String.Format("Error on {0}", ctrlButton.Name));
                        break;//sortie pas propre sur le premier controle en erreur
                    }
                }
            }

Par contre je ne sais pas comment faire si y'a plusieurs groupbox, tu multiplies les tests en attendant que quelqu'un t'aide à tout mettre dans la même boucle, si c'est ça que tu veux.
salut.
Messages postés
2
Date d'inscription
samedi 2 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2010

Merci pour ta réponse.

ça marche, mais j'ai pas réussi avec plusieurs groupbox.

Merci,
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
avec peut-etre la concaténation des 2 codes, non ?

foreach (Control ctrlButton in this.Controls)
{
  if (ctrlButton is TextBox && ctrlButton.Visible == true)
  {
    if(String.isNullOrEmpty(ctrButton as TextBox).Text)
    {
        MessageBox.Show(String.Format("Error on {0}",ctrButton.Name));
        break;//sortie pas propre sur le premier controle en erreur
    }
  }
  
  if (ctrlButton is GroupBox && ctrlButton.Visible == true)
  {
    foreach (Control ctrlButton2 in ctrlButton.Controls)
    {
      if (ctrlButton2 is TextBox && ctrlButton2.Visible == true)
      {
        if (String.IsNullOrEmpty((ctrlButton2 as TextBox).Text))
        {
           MessageBox.Show(String.Format("Error on {0}", ctrlButton2.Name));
           break;//sortie pas propre sur le premier controle en erreur
        }
      }
    }
  }
}


Evidemment ça ne traite que les textboxs directement sur l'écran ou dans des groupbox, eux-même directement sur l'écran
Pour traiter des textbox dans des panels, ou autres container, ou alors placer sur un 3eme niveau (panel dans un groubox, par exemple), plutot qe de dupliquer le code à l'infini, il faudrait envisager un code plus générique avec éventuellement une fonction récursive pour traiter l'ensemble des niveaux rencontrés



[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
37
Pour les groupbox et les panels ...
Il faut utiliser la récursivité, j'ai oublié de le préciser dans le message, j'ai posté trop vite ;-)

Avec la propriété hasChildren

Bon dev.