Besoin de votre avis sur la validation d'un formulaire

Résolu
dodo7263 Messages postés 616 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 - 25 sept. 2013 à 21:39
dodo7263 Messages postés 616 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 - 27 sept. 2013 à 18:39
Bonjour,

Je cherche la meilleure solution à mon soucis. En fait j'ai plusieurs solutions sous le coude et je voulais avoir votre avis ou pourquoi pas d'autres pistes.

En fait j'ai un formulaire avec en tout une vingtaine de contrôle (textbox, combobox et de numericUpDOwn). Je souhaite donc, sur un clic bouton, vérifier que tous ces contrôles sont bien remplis (aucun de ces contrôles ne doit être vide).

Alors comme solutions j'ai pensé :

Solution 1 : dans l'événement clic du bouton faire :
if (textbox1.text == string.Empty || textbox2.text == string.Empty...)
20 fois)
Je trouve cette solution pas très jolie

Solution 2 : Ensuite j'ai pensé utiliser l'événement leave de chaque contrôle mais pareil cela va me faire une vingtaine d'événements leave à gérer. Faisable mais si un jour je décide de modifier mon formulaire je suis cuit....

Solution 3 : Ensuite j'ai pensé, au chargement de ma forme, d'enregistrer tous mes contrôles dans une list<control> puis dans l'événement clic du bouton faire :

list<Control> ControlList = new list<Control>()

foreach (TextBox txtBox in ControlList )
{
   if (txtBox.Text == String.Empty)
   {
       messageBox.show("blablabla");
       btn.enabled = false
    }                    
}

foreach (ComboBox cbBox in ControlList )
{
   if (cbBox .Text == String.Empty)
   {
       messageBox.show("blablabla");
       btn.enabled = false
    }                    
}


Qu'est ce que vous en pensez ?
Avez vous d'autres solutions auxquelles je n'aurais pas pensé ?

@++

6 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 23
25 sept. 2013 à 22:05
Salut,

la boucle ça peut le faire mais sans utiliser de List<> puisque le formulaire en maintient déjà une :
this.Controls
... et en faisant qu'une seule boucle,

foreach(Control c in this.Controls)
{

}


Sinon,
tu peux utiliser un seul evt Leave et te servir du parametre sender qui sera le contrôle testé

textBox1.Leave += new EventHandler(maFonction);
DropDownList1.Leave += new EventHandler(maFonction);
comboBox1.Leave += new EventHandler(maFonction);

void maFonction(object sender, EventArg e)
{
if (
(sender is TextBox && (sender as TextBox).Text == "") ||
(sender is DropDonwList && (sender as DropDownList).SelectedValue == "") ||
(sender is ComboBox && (sender as ComboBox).Text == "" )
/*ect...*/
)
}


bye...
0
dodo7263 Messages postés 616 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 6
26 sept. 2013 à 09:36
Bonjour,

Merci yann de ta réponse.
Pour la première solution que tu proposes, j'utilisais une list<> car je ne mettais dedans que mes contrôles qui m'intéressaient (textbox, combo et numeric). J'ai bien pensé à utiliser le this.control mais du coup il me parcours tous mes contrôles de ma form (bouton, groupbox etc...)

En revanche je n'ai pas pensé à la seconde solution du moins pas sous cette forme.

Je ne ferme pas ce topic de suite (je pourrais) au cas ou quelqu'un d'autre propose une autre idée.

@++
0
Whismeril Messages postés 17828 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 5 octobre 2022 618
26 sept. 2013 à 22:12
Bonsoir,

une autre piste, tu peux créer une classe avec autant de propriété que tu as de contrôles.
Tu bindes une instance de cette classe comme ça par exemple.

Ensuite soit ta classe implémente propertychange et tu testes tes propriétés quand l'une d'entre elles change.
Soit tu te sers de l'événement qui va bien du databinding source (itemchange ou currentchange).

Ça revient un peux à jouer avec les Leave de chaque contrôle, mais la gestion de données est dans une classe dédiée.
0
dodo7263 Messages postés 616 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 6
26 sept. 2013 à 23:04
Bonsoir whismeril

Très bien ta piste mais tu me donnes de la lecture là ;-)
Je vais être obligé de faire une pause pour lire tout ça mais c'est ça qu'est bon...
En tous cas merci de ton retour...mine de rien, ma source est en train de s'étoffer petit à petit avec vos pistes.

@++

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 38
27 sept. 2013 à 11:21
Hello,

J'ai recodé les Validators qui existent en ASP.net WebForms pour les adapter à Windows Forms.

http://codes-sources.commentcamarche.net/source/43575-windows-forms-validators

Si ça peut t'aider !


sébastien
0
dodo7263 Messages postés 616 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 6
27 sept. 2013 à 18:39
Merci à vous tous pour vos commentaires.
J'ai plein d'idées maintenant.

@++
0