Besoin de votre avis sur la validation d'un formulaire [Résolu]

Messages postés
642
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
9 février 2017
- - Dernière réponse : dodo7263
Messages postés
642
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é ?

@++
Afficher la suite 

6 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
17
0
Merci
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...
Commenter la réponse de yann_lo_san
Messages postés
642
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
9 février 2017
4
0
Merci
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.

@++
Commenter la réponse de dodo7263
Messages postés
13980
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 novembre 2019
319
0
Merci
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.
Commenter la réponse de Whismeril
Messages postés
642
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
9 février 2017
4
0
Merci
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.

@++

Commenter la réponse de dodo7263
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
0
Merci
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
Commenter la réponse de sebmafate
Messages postés
642
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
9 février 2017
4
0
Merci
Merci à vous tous pour vos commentaires.
J'ai plein d'idées maintenant.

@++
Commenter la réponse de dodo7263