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 :

Indexation dans une boucle


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut Indexation dans une boucle
    Bonjour,

    j'ai un fichier ressource qui me permet de gérer différents panneaux dont un où il y a 99 cases à cocher (gestion des voies d'un appareil de mesure).
    Dans la procédure de gestion de ce panneau je vais initialiser ces cases à cocher et les relire lors de l'appui sur un bouton "OK". Je fais actuellement ces traitements case après case, les unes à la suite des autres, ex:

    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
     
    if (LOWORD(wParam) == ID_VALIDER )
                    {
                    nvoie=0;            
                    if( IsDlgButtonChecked( hDlg, IDR_VOIE01 ) )
                        {
                        lvoie[nvoie]= 1;
                        nvoie++;
                        }
                    if( IsDlgButtonChecked( hDlg, IDR_VOIE02 ) )
                        {
                        lvoie[nvoie]= 2;
                        nvoie++;
                        }
                        .
                        .
                        .
                    if( IsDlgButtonChecked( hDlg, IDR_VOIE99 ) )
                        {
                        lvoie[nvoie]= 99;
                        nvoie++;
                        }
                        }
    Avouez que c'est pas beau hein

    Je voudrais donc faire cela dans une boucle mais je ne sais pas comment adresser les IDR_VOIExx dans celle-ci. Je sais le faire en VBA (enfin j'ai su) mais en C ... Il doit bien exister un moyen, aussi si quelqu'un peu éclairer ma lanterne cela serait sympa,

    Merci d'avance
    Taiby

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( IsDlgButtonChecked( hDlg, IDR_VOIE01 ) )
    Le problème, c'est la présence de ces constantes. Vérifie si les constantes VOIExx sont toutes incrémentées de 1 dans l'intervalle 1<=xx<=99. Si c'est le cas (et uniquement dans ce cas), alors il y a une méthode -que je qualifierais de pas très propre- pour s'en sortir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (LOWORD(wParam) == ID_VALIDER )
    {
    	int i;
    	nvoie = 0;
    	for (i = 0 ; i < 99 ; i++)
    	{
    		if( IsDlgButtonChecked( hDlg , IDR_VOIE01 + i ) )
    		{
    			lvoie[nvoie] = i + 1 ;
    			nvoie++;
    		}
    	}
    }
    En cas de modification de la ressource, il faudra TOUJOURS s'assurer que VOIExx va de 1 en 1. La valeur de VOIE01 n'a aucune importance ici.

    Si VOIExx ne va pas partout de 1 en 1, il y a la méthode -plus propre mais plus fatigante- d'un tableau :

    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
    int tabRessourcesVoies[[99] = { VOIE01 , VOIE02 , VOIE03 , VOIE04 , ...... } ; /* jusqu'à VOIE99 */
     
    if (LOWORD(wParam) == ID_VALIDER )
    {
    	int i;
    	nvoie = 0;
    	for (i = 0 ; i < 99 ; i++)
    	{
    		if( IsDlgButtonChecked( hDlg , tabRessourcesVoies[i] ) )
    		{
    			lvoie[nvoie] = i + 1 ;
    			nvoie++;
    		}
    	}
    }
    L'intérêt, c'est que, quelles que soient les valeurs de VOIExx, ça marchera.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut
    Oui en effet, je voyais cela plus compliqué mais il n'y a pas de raison.
    Cela marche parfaitement, j'ai opté pour la solution 1 sachant que mes numéros de voie se suivent et qu'il n'y a pas de raison que cela change.


    Un grand merci !!

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

Discussions similaires

  1. Incrémentation d'index dans une boucle for
    Par Invité dans le forum Langage
    Réponses: 12
    Dernier message: 15/02/2013, 15h51
  2. Nom de variables indexés dans une boucle FOR-END
    Par matthieu.gaudet dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/05/2008, 18h11
  3. swf dans une boucle asp
    Par Chucky69 dans le forum Flash
    Réponses: 11
    Dernier message: 10/02/2004, 17h07
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

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