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++Builder Discussion :

Récupérer la selection d'une Combobox n'ayant pas le focus


Sujet :

C++Builder

  1. #1
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut Récupérer la selection d'une Combobox n'ayant pas le focus
    Bonjour à tous

    J'ai dans mon programme en boite de dialogue chargée de régler des paramètres de mon applications.

    J'ai 2 Combobox qui sont liés.

    si l'on change la première, le nombre d'éléments de la deuxième doit changer.

    j'ai donc une méthode OnChange sur la première
    or, dans cette fonction je veu récupérer la valeur de la deuxième ComboBox pour la mémoriser, mais n'ayant pas le focus, je ne peux pas utiliser SelText de cette ComboBox.

    Comment faire pour récupérer ca valeur

    Merci d'avance.

  2. #2
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    il ya la proprité ItemIndex qui permet de recuperer l'indice du texte sélectionné..

    mais je n'est pas bien compris le probleme : ta 2eme combobox reste déroulée quand tu clique sur ta 1ère ?

  3. #3
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    non elle ne reste pas dérouler, je m'explique

    la valeur sélectionné de ma première comboBox détermine les valeurs possibles de la deuxième comboBox.

    C'est pour ca que je veux récupérer la valeur sélectionné de la deuxième ComboBox dans la méthode OnChange de la première ComboBox pour pouvoir effacer les itens et les reconstruire avec les nouvelles valeur et ensuite faire en sorte que la précédente valeur (Celle que j'ai mémorisé) reste sélectionné.

    J'espère avoir été clair

  4. #4
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    En fait tu veux récuperer le parametre choisi de la comboBox2 correspondant
    au parametre choisi de la comboBox1 à chaque changement.

    Ma réponse reste la propriété ItemIndex
    voici 1 exemple avec 2 combobox (la 1ere contient les items a et b, la deuxieme contient a,aa,aaa,.... b,bb,bbb):

    dans le .h

    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
    class TParamList{
    public:
            TStringList * ListParam;
            int sel_index;
     
            __fastcall TParamList(){
               ListParam=new TStringList();
               sel_index=0;
            }
    };
     
    class TForm1 : public TForm
    {
    __published:	// IDE-managed Components
            TComboBox *ComboBox1;
            TComboBox *ComboBox2;
            void __fastcall ComboBox1Change(TObject *Sender);
    private:	// User declarations
    public:		// User declarations
            __fastcall TForm1(TComponent* Owner);
           TParamList * pl1;
           TParamList * pl2;
           int cb1_index_save;
    };
    dans le .cpp

    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
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
           ComboBox1->Items->Add("a");
           ComboBox1->Items->Add("b");
     
           pl1 = new TParamList();
           pl2 = new TParamList();
     
           pl1->ListParam->Add("a");
           pl1->ListParam->Add("aa");
           pl1->ListParam->Add("aaa");
           pl1->ListParam->Add("aaaa");
           pl1->ListParam->Add("aaaaa");
     
           pl2->ListParam->Add("b");
           pl2->ListParam->Add("bb");
           pl2->ListParam->Add("bbb");
           pl2->ListParam->Add("bbbb");
           pl2->ListParam->Add("bbbbb");
     
           cb1_index_save=-1;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::ComboBox1Change(TObject *Sender)
    {
     
            if(cb1_index_save==0){
               pl1->sel_index = ComboBox2->ItemIndex;
            }
            if(cb1_index_save==1){
               pl2->sel_index = ComboBox2->ItemIndex;
            }
     
            ComboBox2->Items->Clear();
            if(ComboBox1->ItemIndex==0){
                    ComboBox2->Items->AddStrings(pl1->ListParam);
                    ComboBox2->ItemIndex = pl1->sel_index;
            }
            if(ComboBox1->ItemIndex==1){
                    ComboBox2->Items->AddStrings(pl2->ListParam);
                    ComboBox2->ItemIndex = pl2->sel_index;
            }
            cb1_index_save=ComboBox1->ItemIndex;  //sauvegarde du dernier item de cbx1 selectionné
     
    }
    //---------------------------------------------------------------------------

  5. #5
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Non, mais je n'ai pas été assez clair, je men excuse.

    Je m'explique

    le sélectionne une valeur dans la première comboBox, et je veux qu'en fonction de cette valeur, l'ensemble des valeurs de la deuxième ComboBox soit redéfinni en conséquence. (ValeurMin et ValeurMax de la deuxième ComboBox dépende de la valeur sélectionné dans la première ComboBox).

    Ce que je veux donc, c'est pouvoir récuprer la valeur sélectionné de la deuxième comboBox dans la méthode OnChange de la première pour pouvoir lors de la mise à jour des éléments resélectionner cette valeur si elle apartiens à l'intervalle (ValeurMin ValeurMax).

    Concernant ItemIndex, cela marche que lorsque la ComboBox à le focus, sinon ItemIndex te retourne -1

  6. #6
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    Concernant ItemIndex, cela marche que lorsque la ComboBox à le focus, sinon ItemIndex te retourne -1
    Je ne suis pas d'accord avec toi sur ce point.
    ItemIndex=-1 quand l'utilisateur n'a encore rien selectionné dans la comboBox2 ( ou plus rarement si tu affecte directement une valeur par le programme à ta combobox sans utiliser itemindex.) .
    Heureusement qu'on est pas obligé d'avoir le focus sur la combobox pour récupérer l'indice sélectionné !!!!
    (Dans mon exemple ci-dessus, si tu prends la peine de le tester,on voit bien que dans OnChange de combobox1 (donc à ce moment ComboBox1 a le focus) je recupere l'élément sélectionné de ComboBox2 via ItemIndex ( alors que comboBox2 n'a pas le focus ).

    Concernant le probleme,sans exemple concret, je dois bien avouer mon incapacité le comprendre.

  7. #7
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Tu as raison pour ItemIndex, car à l'initialisation de la boite de dialogue contenant les ComboBox, j'initialise les valeurs par programme.

    Sinon concernant mon programme. La boite de dialogue sert à définir certains paramètres de mon application qui est chargé d'afficher des cibles à l'écran positionné sur un cercle.

    Les paramètres sont Donc :
    - la couleur de la cible (TColorBox)
    - Le diamètre de la cible (TComboBox)
    - La couleur du cercle (TColorBox)
    - le diamètre du cercle (TComboBox)
    - la couleur du fond de l'écran (TColorBox)

    la ComboBox pour le diamètre de la cible est initialiser au départ.

    Par contre, celle concernant le diamètre du cercle est initialisé en fonction de la valeur sélectionné dans la ComboBox du diamètre de la cible.

    Les éléments de cette ComboBox doivent être compris entre :
    ValeurMin = (Diamètre de la Cible) / 2;
    ValeurMax = (Hauteur de l'écran) - ((Diamètre de la cible) / 2)

    de cette façon, lorsqu'on modifie la ComboBox du diamètre de la cible, la ComboBox du diamètre du cercle doit être reconstruite en conséquence.

    C'est pour cela que je veux récupérer la valeur sélectionner dans cette comboBox pour pouvoir la sauvegarder.

  8. #8
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    pour sauvegarder la valeur sélectionnée
    tu ne peux pas faire simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    float  sauve;
     
    void __fastcall TForm1::ComboBox1Change(TObject *Sender)
    {
            sauve = StrToFloat(ComboBox2->Text);
    }

  9. #9
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    C'est ce que j'avais fait au début mais cela ne marche pas car la ComboBox2 n'a pas le focus donc la valeur Text ne renvoit rien.

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Pourquoi ne pas utiliser la fonction "switch" puis "case"?

  11. #11
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    Le probleme n'est peut être pas le focus (même probleme que ItemIndex),
    mais peut être la manière d'initialiser la combobox..
    Qu'en penses tu ?

  12. #12
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Comment ? je ne te suis pas là ulu26

    Djob
    concernant l'initialisation, c'est justement ce que je suis en train de regarder. Mais j'ai également des soucis

    jusqu'à présent, je faisait
    ComboBox1->Text = AnsiString(Diametre);

    de cette manière, je n'ai rien de sélectionné, ce qui ne m'arrange pas.

    Je voudrais donc balayer tous les éléments de ma ComboBox et lorsque j'ai atteint l'item correspond, je le sélectionne. Et je n'y arrive pas, j'ai une violation d'accès. Je n'arrive pas a récupéré la valeur de l'item d'indice i. [/code]

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Je dois me tromper car je suis encore débutant mais si je ne me trompe pas c'est très simple:

    switch(Conf_com -> ItemIndex)
    {
    case 0 : liaison_rs.choix_com=1;break;
    case 1 : liaison_rs.choix_com=2;break;
    case 2 : liaison_rs.choix_com=3;break;
    case 3 : liaison_rs.choix_com=4;break;
    }

    Pour chaque choix possible on lui donne un nom et après on l'utilise à sa guise.

  14. #14
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    pout initialiser correctement L'itemIndex peut être peux tu faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float Diametre =10.5;
    ComboBox1->ItemIndex = ComboBox1->Items->IndexOf(FloatToStr(Diametre ));
    ou peut etre FormatFloat... qui est plus maléable

  15. #15
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    C'est nikel Djob, tout fonctionne je te remerci pour ton aide

    Merci aussi a lulu26

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

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 18h26
  2. Réponses: 2
    Dernier message: 12/04/2007, 10h15
  3. Récupérer la valeur d'une combobox
    Par Invité dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/03/2006, 16h20
  4. [C#] Selection dans une comboBox
    Par ShinS16 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 03/01/2006, 02h58
  5. Réponses: 2
    Dernier message: 29/05/2005, 20h50

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