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

C# Discussion :

Arrêt momentané de boucle do/while


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Par défaut Arrêt momentané de boucle do/while
    Bonjour,

    Voila, j'ai un datagrid dans le quel je peut modifier, supprimer et ajouter des lignes.
    Puis, je fait une vérification des données saisies dans la datagrid par l'utilisateur, dont voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    nomn = dataGrid1[dataGrid1.CurrentCell.RowNumber,1].ToString();
    			typen = dataGrid1[dataGrid1.CurrentCell.RowNumber,1].ToString();
    			nbn = dataGrid1[dataGrid1.CurrentCell.RowNumber,1].ToString();
    			sn = dataGrid1[dataGrid1.CurrentCell.RowNumber,2].ToString();
    			type =  dataGrid1[dataGrid1.CurrentCell.RowNumber,3].ToString();
    			modele= dataGrid1[dataGrid1.CurrentCell.RowNumber,4].ToString();
    			site = dataGrid1[dataGrid1.CurrentCell.RowNumber,5].ToString();
    			serv = dataGrid1[dataGrid1.CurrentCell.RowNumber,6].ToString();
    			dateE = dataGrid1[dataGrid1.CurrentCell.RowNumber,7].ToString();
    			ncde = dataGrid1[dataGrid1.CurrentCell.RowNumber,12].ToString();
     
    			do
    			{
    				if((nomn.Length<8)||(nomn.Length ==0)||(nomn.Length >8))
    				{
    					MessageBox.Show("Le nombre de caractères du nom n'est pas valide!");
    					break;
    				}
    				else
    				{
    					type1n = Convert.ToChar(typen.Substring(3,1));
     
    					if(nomn.Substring(0,3) != "LAN")
    					{
    						MessageBox.Show("Le site ( " + nomn.Substring(0,3) + " ) déclaré dans le nom est incorrecte!");
    						break;
     
    					}
    					if ((type1n != 'W') && (type1n != 'L') && (type1n != 'S'))
    					{
    						MessageBox.Show("Le type " +type1n+ " est incorrect! Saisir les types 'W' 'L' ou 'S'! ");
    						break;
    					}
    					if((Convert.ToInt16(nbn.Substring(4,4))<0001) && (Convert.ToInt16(nbn.Substring(4,4)) < 9999))
    					{
    						MessageBox.Show("Le nombre qui a été saisi dans le nom n'est pas valide");
    						break;
    					}
    					if(sn.Length == 0)
    					{
    						MessageBox.Show("Remplir le champ SN!");
    						break;
    					}
     
    					if(type.Length == 0)
    					{
    						MessageBox.Show("Remmplir le champ Type!");
    						break;
    					}
     
    					if(modele.Length ==0)
    					{
    						MessageBox.Show("Remplir le champ Modele!");
    						break;
    					}
     
    					if(site.Length ==0)
    					{
    						MessageBox.Show("Remplir le champ Site!");
    						break;
    					}
     
    					if(serv.Length ==0)
    					{
    						MessageBox.Show("Remplir le champ Service!");
    						break;
    					}
     
    					if(dateE.Length ==0)
    					{
    						MessageBox.Show("Remplir le champ date_entrée!");
    						break;
    					}
     
    					if(ncde.Length ==0)
    					{
    						MessageBox.Show("Remplir le champ num_cde");
    						break;
    					}
    				}
    			}while((nomn.Length>8) || (nomn.Length==0) || (nomn.Length < 8) && (nomn.Substring(0,3) != "LAN") && (Convert.ToChar(typen.Substring(3,1)) != 'W') || (Convert.ToChar(typen.Substring(3,1)) != 'L') || (Convert.ToChar(typen.Substring(3,1)) != 'S') && (Convert.ToInt16(nbn.Substring(4,4))<0001) || (Convert.ToInt16(nbn.Substring(4,4)) < 9999) && (sn.Length == 0)&& (type.Length == 0) && (modele.Length ==0) && (site.Length ==0) && (serv.Length ==0)&& (dateE.Length ==0) && (ncde.Length ==0));
    (Ne faites pas attention à la longeur, et au nombreux "if", je ne l'ai pas encore optimisé...)^^

    Bref, ce que je voudrais faire, c'est qu'après l'affichage du MessageBox comme dans cet exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(sn.Length == 0)
    					{
    						MessageBox.Show("Remplir le champ SN!");
    						break;
    					}
    Je voudrais interrompre momentanément cette boucle do...while, le temps que l'utilisateur puisse corriger son erreur...

    Help me please...

  2. #2
    Membre expérimenté Avatar de el_pedro
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 200
    Par défaut
    Salut.

    Ce que tu peux faire, c'est créer une form avec un label (pour afficher l'erreur) et une textbox (pour saisir la nouvelle valeur) et dans ta boucle do...while, tu met un maForm.ShowDialog(), ta boucle do...while s'arrêtera la temps que ta form reste ouverte. Dans ta form, tu met un simple bouton OK.

    Enfin tu transforme tes IF en While. Avec ça, si la données est fausse, le prog ouvrira ta forme de correction, et temps que la valeur saisie n'est pas bonne, elle réapparaitra.

  3. #3
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Pis, c'est pas pour dire mais les if(){break;}
    Il y a une condition de sortie dans le while !!!
    Autant mettre des Goto label tant qu'on y est !!!

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    les break ca gagne du temps d'execution ... et parfois de la lisibilité ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Par défaut
    Merci pour ta réponse,
    l'idée est excellente, mais je n'arrive pas a utiliser la méthode ShowDialog()...

    En fait, ShowDialog n'est pas reconnu par le programme dans son exécution, et quand je le tape en dur, il n'apparait pas dans la liste qui se forme lorsque tu tape un mot... A croire qu'il n'existe pas! Mais, en recherchant dans l'aide de Visual studio, il apparait...

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Par défaut
    'idée est excellente, mais je n'arrive pas a utiliser la méthode ShowDialog()...
    Quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    using (var f = new MyForm("mon message")
    {
       f.ShowDialog();
       if (f.DialogResult == DialogResult.OK)
          var MaValeurDeRetour = f.MaValeur;
       ...
    }
    avec MaValeur = propriété publique de MyForm (si nécessaire)
    "Mon message" = paramètres à passer au constructeur de MyForm (si nécessaire)

    A+
    Claude

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

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 192
    Par défaut
    Salut,
    J'avais un problème similaire et je l'ai résolu en utilisant une inputbox.
    je sais que ça n'existe pas en c# (d'aprés mes connaissances), mais j'ai utilisé l'intéropérabilité avec VB, voila comment j'ai fait :

    -Ajouter une référence à Microsoft.VisualBasic
    -Ajouter la directive :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using Microsoft.VisualBasic;
    -Et voila le code de l'input box:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String val;
    val = Interaction.InputBox("Veuillez saisir une valeur dans la zone de texte : ", "Titre de l'inputbox", "0", x, y);
    Remarque :
    val va prendre la valeur saisie dans a zone de texte de l'inputbox aprés le clique sur OK de l'input.
    X et Y définissent la position de l'inputbox à l'écran.


    J'éspére que ça résout ton problème.

    @++

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while((nomn.Length < 8)||(nomn.Length == 0)||(nomn.Length > 8))
    				{
    					Form FE = new formE();
    					FE.ShowDialog();
     
    					if(FE.ShowDialog() == DialogResult.OK)
    					{
     
    					//Instruction...	
     
    					}
    J'ai trouvé comment utiliser! Merci beaucoup à vous tous!

    mais, pourriez vous me dire maintenant comment affecter la valeur changée dans une textBox du formulaire FE à une variable du formulaire contenant ce code-ci?
    Idem pour le label, c'est-à-dire l'affichage de l'erreur dans la label par le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    catch(System.Exception ex)
    			{
    				MessageBox.Show(ex.Message);
    			}
    Merciii beaucoup!

  9. #9
    Membre expérimenté Avatar de el_pedro
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 200
    Par défaut
    Ah, je savais pas qu'on pouvais utiliser les inputbox de VB en Csharp.

    Il te suffit donc de faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    do{
     
     while(champ1 != condition1){
      champ1 = Interaction.InputBox("Veuillez saisir une valeur : "); //Je ne sais plus l'utilisation de la inputbox...
     }
     
     while(champ2 != condition2){
      champ2 = Interaction.InputBox("Veuillez saisir une valeur : "); //Je ne sais plus l'utilisation de la inputbox...
     }
     
    {...}
     
    }while(conditionDeFin);
    Perso, je ne trouve pas les break; tellement plus propre que les GOTO, l'utilisation du break; indique qu'on ne maitrise pas forcement ses conditions de sorties (je ne l'utilise que très rarement et ce pour les switch ou quand je n'ai vraiment pas d'autre solution).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 23/09/2019, 17h45
  2. Condition d'arrêt d'une boucle WHILE
    Par el_gringo16 dans le forum Débuter
    Réponses: 4
    Dernier message: 15/06/2010, 19h09
  3. [VBA] Boucle Do While
    Par jmde dans le forum Access
    Réponses: 4
    Dernier message: 16/10/2005, 21h23
  4. probleme de recordset dans une boucle do while
    Par Shoryu dans le forum ASP
    Réponses: 18
    Dernier message: 05/07/2004, 16h30
  5. Appel recurssif et boucle Do...While
    Par zsoh dans le forum Langage
    Réponses: 6
    Dernier message: 31/05/2004, 19h01

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