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

MFC Discussion :

Garder le focus sur une CListCtrl


Sujet :

MFC

  1. #1
    Expert éminent
    Avatar de shawn12
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2006
    Messages
    3 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2006
    Messages : 3 368
    Points : 6 800
    Points
    6 800
    Par défaut Garder le focus sur une CListCtrl

    Je rencontre un problème dans mon application.
    J'ai mis en place un CListCtrl et des boutons "modifier" et "supprimer". Le problème, c'est que quand je sélectionne une ligne et que je clique ensuite sur un des deux boutons, ma CListCtrl perd le focus (ça c'est normal je pense) mais par la même occasion, il perd la sélection que j'ai faite.

    Est-il possible de garder la sélection lorsque je clique sur un bouton ?

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    tu as essayé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MyListCtrl.SetFocus();
    dans le message de click du bouton ?

  3. #3
    Expert éminent
    Avatar de shawn12
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2006
    Messages
    3 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2006
    Messages : 3 368
    Points : 6 800
    Points
    6 800
    Par défaut
    Merci pour ta réponse farscape.
    J'ai essayé de faire ce que tu m'a indiqué. Cela fonctionne lorsque j'intercepte le clic simple sur le bouton "modifier".
    Par contre, pour le bouton "supprimer", j'avais géré l'évènement double click pour plus de sécurité. Mais dans ce cas, ça ne marche pas, même en rajoutant .SetFocus() dans la methode de gestion du clic simple.

    Alors deux solutions s'offrent à moi :
    1. Trouver comment faire pour gérer le double clic sur le bouton supprimer
    2. Gérer uniquement le clic simple sur le bouton supprimer (et dans ce cas il faut ajouter un message de confirmation du genre oui/non, mais je ne sais pas faire ...)

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    pourquoi ça ne fonctionne pas?
    quand tu supprimes la ligne il faut mémoriser l'indice de la ligne en cours de sélection.
    puis sélectionner la ligne suivante.
    http://cpp.developpez.com/faq/vc/ind...lEnsureVisible
    supprimer la ligne dont l'indice est mémorisé.
    redonner le focus a la listctrl.

  5. #5
    Expert éminent
    Avatar de shawn12
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2006
    Messages
    3 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2006
    Messages : 3 368
    Points : 6 800
    Points
    6 800
    Par défaut
    Justement, c'est pour obtenir l'indice de la ligne sélectionnée que j'ai un problème. Lorsque je le fait sur un simple clic, j'arrive bien à récupérer la ligne sélectionnée avec .GetFirstSelectedItemPosition(); et à la supprimer.
    Par contre, je n'arrive pas à la récupérer sur un double clic.

    Sinon, est-ce que ce ne serait pas plus simple d'afficher une boite de confirmation oui/non sur un simple clic sur le bouton supprimer ?

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    on peut voir le code ?

  7. #7
    Expert éminent
    Avatar de shawn12
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2006
    Messages
    3 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2006
    Messages : 3 368
    Points : 6 800
    Points
    6 800
    Par défaut
    Avec plaisir.

    Un peu d'explications : la première fonction gère l'évènement double clic sur le bouton "Supprimer" et la deuxième le simple clic sur le bouton "Modifier".

    Pour le moment, dans les deux cas, j'essaye de supprimer la ligne sélectionnée. Cela fonctionne pour la deuxième fonction, mais pas pour la première .

    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
     
    // Si double clic sur le bouton supprimer, on supprime la ligne sélectionnée
    void CCryptoDlg::OnDoubleclickedBtnSuppr()
    {
    	m_liste.SetFocus();
     
    	// on récupère l'indice de la ligne sélectionnée
    	POSITION p = m_liste.GetFirstSelectedItemPosition();
     
    	int numLigne = m_liste.GetNextSelectedItem(p);
     
    	// on supprime la ligne sélectionnée
    	m_liste.DeleteItem(numLigne);
    }
     
    // Si simple clic sur le bouton modifier on supprime la ligne (EN TEST) // on modifie l'élément sélectionné
    void CCryptoDlg::OnBtnModifier() 
    {
     
    	m_liste.SetFocus();
     
    	// on récupère l'indice de la ligne sélectionnée
    	POSITION p = m_liste.GetFirstSelectedItemPosition();
     
    	int numLigne = m_liste.GetNextSelectedItem(p);
     
    	// on supprime la ligne sélectionnée
    	m_liste.DeleteItem(numLigne);
     
     
    }

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Salut,

    La je saurai pas t'aider(??mais c'est pas parce que avant le doubleclick, il detecte le simple click???)
    Mais pour contourner!
    Peut-etre que dans ton cas tu peux faire ca:
    recuperer le changement de selection, un truc du genre ...onSelChange()... sur ton clist et tu stocke l'indice de celui qui est selectionner, et tu saura toujours lequel est selectionne

  9. #9
    Expert éminent
    Avatar de shawn12
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2006
    Messages
    3 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2006
    Messages : 3 368
    Points : 6 800
    Points
    6 800
    Par défaut
    Oui, c'est vrai, je pourrais faire ça et conserver la ligne sélectionnée dans une variable mais bon dans ce cas il serait peut etre plus simple de faire une demande de confirmation ?

    Est-ce que vous pouvez me dire comment (simplement si possible ) faire une demande de confirmation avec un message ("Etes vous sur de vouloir supprimer ?" oui/non ou ok/annuler)

    En tout cas, merci de vous interresser à mon problème

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Citation Envoyé par shawn12 Voir le message
    Oui, c'est vrai, je pourrais faire ça et conserver la ligne sélectionnée dans une variable mais bon dans ce cas il serait peut etre plus simple de faire une demande de confirmation ?
    La c'est toi qui voit, faut surement demander a ton client/chef

    Citation Envoyé par shawn12 Voir le message
    Est-ce que vous pouvez me dire comment (simplement si possible ) faire une demande de confirmation avec un message ("Etes vous sur de vouloir supprimer ?" oui/non ou ok/annuler)
    Regarde les AfxMessageBox,
    Je crois que tu peut faire quelque chose comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (  AfxMessageBox("Tu veux ou tu veux pas?", MB_YESNO|MB_ICONINFORMATION) == IDOK)
    {
    // tu supprime
    }
    Mais apres faut que tu fasse comme ton client/chef a dit, si tu es libre tu fais ce que tu veux

  11. #11
    Expert éminent
    Avatar de shawn12
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2006
    Messages
    3 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2006
    Messages : 3 368
    Points : 6 800
    Points
    6 800
    Par défaut
    Oui, je suis assez libre des choix parce que c'est un outil utilisé en interne et pas pour un client spécifique.

    J'ai donc utilisé ce que tu m'a dit (voir code ci-dessous)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void CCryptoDlg::OnBtnSuppr() 
    {
    	m_liste.SetFocus();
    
    	// on récupère l'indice de la ligne sélectionnée
    	POSITION p = m_liste.GetFirstSelectedItemPosition();
    
    	int numLigne = m_liste.GetNextSelectedItem(p);
    
    	if (  AfxMessageBox("Supprimer cet établissement ?", MB_YESNO|MB_ICONQUESTION) == IDYES){
    		// on supprime la ligne sélectionnée
    		m_liste.DeleteItem(numLigne);
    	}	
    }
    Il m'a fallu faire une petite modification au niveau du == IDOK, je l'ai remplacé par IDYES pour être en accord avec le MB_YESNO.

    Voila, problème résolu.

    Merci à farscape et kacedda pour votre aide

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

Discussions similaires

  1. garder le focus sur une option selectionnée d'un select
    Par sajodia dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 01/12/2010, 15h26
  2. Garder le focus sur une popup
    Par identifiant_bidon dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/11/2007, 17h12
  3. focus sur une input text
    Par mic79 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/01/2005, 18h06
  4. Focus sur une cellule spécifique d'un DBGrid
    Par danbern dans le forum Bases de données
    Réponses: 4
    Dernier message: 25/11/2004, 19h04
  5. Focus sur une application Windows
    Par mixi dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/10/2004, 19h57

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