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

VC++ .NET Discussion :

[C++.NET][ListView]Comment activer un Icone avec 'Enter' ?


Sujet :

VC++ .NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut [C++.NET][ListView]Comment activer un Icone avec 'Enter' ?
    Slt,

    Comment faire pour que dans une listView, lorsque l'on fait appuye sur "entrer" sur un des icones, celui-ci soit activé. En gros avoir la meme chose qu'un double click sur l'icone mais avec la touche entrée.
    J'ai rien trouvé dans la msdn sur les évènements liés au touchee du clavier.

    Thx
    ++

  2. #2
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Le moyen que j'ai testé est de faire un dérivé de ListView ce qui permettra d'atteindre par exemple la méthode protégée OnDoubleClick . Celle-ci étant appelée dans la méthode KeyPress de ton CustomListView si le EventArgs.KeyCode est un (char) 13
    Désolé, ne connaissant pas correctement le C++, je ne pourrai te donner que du code C# ou VB.Net ou Delphi.Net

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut
    Slt,

    Quand tu parles de "CustomListView", c'est quelquechose qui existe deja dans VC++?
    Sinon, meme si j'arrive à récupérer l'évènement lié au clavier, comment je peux savoir ou peux définir qu'il doit être récupérer que dans le cas où l'on utilise la touche "enter"?

    je ne pourrai te donner que du code C# ou VB.Net ou Delphi.Net
    Et bien si tu as quelquechose dans ces langages, je suis quand même preneur, ce que j'aimerais bien c'est juste avoir un modèle, après j'essairais de me débrouiller.
    (si j'avais su je me serais mis au C# pour faire mon ihm....)


    En plus de ceci, il y a quelque chose que je ne sais pas faire sur mon ihm (dsl je suis un newbie), euh neguib, je peux exposer ca sur le meme post ou faut que je refasse un sujet? (j'demande car j'ai posté deja plusieurs posts en qques jours :S)

    ++

  4. #4
    Membre expérimenté Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Par défaut
    Allez hop je ressors mon C++ .NET :
    Par "CustomListView", j'imagine qu'il veut te conseiller de créer une nouvelle classe héritée de ListView et si ce n'est pas le cas, alors moi je le fais

    Voici ce que donne son 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
    	__gc class CustomListView : public ListView
    	{
    		protected: bool ProcessDialogKey(Keys keyData)
    				   {
    					   switch(keyData)
    					   {
    							case Keys::Return:
    								this->OnDoubleClick(NULL);
    								return true;
     
    							default:
    								return ListView::ProcessDialogKey(keyData);
    					   }
    				   }
    	};
    Par contre mon C++ .NET étant bien rouillé, je sais pas si ça fonctionnera vraiment Mais ça ne coûte rien d'essayer

    [Edit]Je suis pas du tout sûr que ça fasse exactement ce que tu veux car je connais pas le fonctionnement de ListView.OnDoubleClick ( et j'avoue aussi que j'ai pas trop compris ce que tu voulais faire )... Mais tu as déjà le fond de la solution [/Edit]

  5. #5
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par DeusXL
    Allez hop je ressors mon C++ .NET :
    Par "CustomListView", j'imagine qu'il veut te conseiller de créer une nouvelle classe héritée de ListView et si ce n'est pas le cas, alors moi je le fais

    Voici ce que donne son 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
    	__gc class CustomListView : public ListView
    	{
    		protected: bool ProcessDialogKey(Keys keyData)
    				   {
    					   switch(keyData)
    					   {
    							case Keys::Return:
    								this->OnDoubleClick(NULL);
    								return true;
     
    							default:
    								return ListView::ProcessDialogKey(keyData);
    					   }
    				   }
    	};
    Par contre mon C++ .NET étant bien rouillé, je sais pas si ça fonctionnera vraiment Mais ça ne coûte rien d'essayer

    [Edit]Je suis pas du tout sûr que ça fasse exactement ce que tu veux car je connais pas le fonctionnement de ListView.OnDoubleClick ( et j'avoue aussi que j'ai pas trop compris ce que tu voulais faire )... Mais tu as déjà le fond de la solution [/Edit]
    Eh bien merci DeusXL pour cette leçon de C++
    A vue de nez c'est ce que je voulais expliquer à notre ami, bien sûr ceci ne fonctionnera que si la propriété CustomListView.Activation a pour valeur dans cet exemple ItemActivation.TwoClick

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut
    Slt,

    J'ai essayé de faire comme ceci:

    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 OutilsSpectra::Form1::listView1_KeyPress(System::Object*  sender, System::Windows::Forms::KeyPressEventArgs*  e)
    {
    	ListViewItem* selection = listView1->GetItemAt(e->X, e->Y);
     
    	if (e->KeyChar == '\r') 
    	{
    		// If the user chooses item[0] in the ListView, display
    		// the "FT_to_FC" form.
    		if (Object::Equals(selection, listView1->Items->get_Item(0))) 
    		{	
    			Fiche_FT_to_FC* f1 = new Fiche_FT_to_FC();
    		}
         }
    }
    et définit un peu avant dans mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->listView1->KeyPress += new KeyPressEventHandler(this, listView1_KeyPress);
    Alors, avec ce code je peux activer les icones de mon listview avec "enter", mais le probleme c'est que j'arrive pas à différencier chacun des icones lorsque l'on fait "enter" dessus. J'ai essayé d'utiliser listView1->GetItemAt(e->X, e->Y), mais pour un KeyPressEventArgs, il n'y a pas de propriété X et Y , y a t-il une alternive pour distinguer chacun des icones?

    ++

  7. #7
    Membre expérimenté Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Par défaut
    Bah pour avoir la position relative de ta souris sur ta form, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Point myPoint = Cursor::get_Position();
    myPoint.X -= this->Location.X;
    myPoint.Y -= this->Location.Y;
    listView1->GetItemAt(myPoint->X, myPoint->Y);
    Et après, tu peux traiter ces valeurs mais bon la dernière fois que je me suis aventuré dans les curseurs de souris, j'en suis mal ressort. Et en plus je parie que je me casse la tête et qu'il y a plein de fonctions bien basiques pour faire ça.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut
    Lut DEusXL
    pour ton code, la position de la souris ne va pas m'aider puisque je ne l'utilise pas pour sélectionner mon icone, si par exemple j'utilise le focus sur l'icone et apres je fais entrer. D'un autre coté, je vais testé ton code en esperant que ca puisse m'aider.

    Bonne soirée.

  9. #9
    Membre expérimenté Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Par défaut
    Attend je ne comprends pas, tu veux développer un item sélectionné lorsqu'on appuie sur Entrer : Si oui alors
    ListView::get_SelectedItems()
    ne t'aide pas ?
    Comme tu parlais de GetItemAt, j'ai imaginé que tu voulais la position de la souris...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut
    Attend je ne comprends pas, tu veux développer un item sélectionné lorsqu'on appuie sur Entrer
    Oui c'est ca, en faisant "entrer" sur un des icones de ma listeView, une fenetre bien précise doit s'ouvrir. Donc comme ce n'est pas la même fenêtre qui se lance suivant l'icone qui est activer par "enter" j'ai besion de savoir quel icone a recu l'evènement Keypress. J'espere me faire comprendre (javoue que c'est pas super simple de bien expliquer)

    J'ai utilisé GetItemAt() car je sais qu'avec cette méthode je peux savoir quel icone a été sélectionner, mais je ne savais pas que c'etait exclusivement valable avec le clic de souris. Enfin c'est du moins ce que j'en déduis puisque pour un KeyPressEventArgs je n'ai pas accès au X et Y, donc getItemAt() n'est pas utilisable dans mon cas

    Quand à get_SelectedItems(), je n'ai pas souvenir d'avoir essayer avec ca (il y a telment de fonction qu'on finit par s'y perdre)

    ++[/b]

  11. #11
    Membre expérimenté Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Par défaut
    Citation Envoyé par Tchaka
    (il y a telment de fonction qu'on finit par s'y perdre)
    Entièrement d'accord... Surtout que la documentation C++ .NET est spécialement mal rédigée et qu'on est bien souvent tenté de mélanger managed / unmanaged de manière imprécise. Moi de toute façon j'ai vite lâché ce langage qui ne me semble pas tout à fait prêt à .NET ... C'est juste une impression et elle est peut être stupide mais depuis que je suis au C#, la vie est... plus rose, le ciel plus bleu, l'herbe plus verte et les filles (encore) plus jolies mais ça, je pense que c'est une illusion d'optique, ça ne doit avoir aucun rapport avec le C#...

    Pour en revenir à ton problème, comme j'avais bien compris cette fois, c'est bien get_SelectedItems() qui t'aidera... Il faut que tu fasses un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ListView::SelectedListViewItemCollection *iList = listView1->get_SelectedItems();
    for(int i = 0; i < iList->Count; i++)
    {
       if(iList->get_Item(i)->get_Text() == S"Form1")
    	    //Afficher la Form1.
       else if(iList->get_Item(i)->get_Text() == S"Form1")
    	    //Afficher la Form1.
       else //usw...
    }

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C'est juste une impression et elle est peut être stupide mais depuis que je suis au C#, la vie est... plus rose, le ciel plus bleu, l'herbe plus verte
    Eh oui, comme je l'ai mentionné dans mon 2ème message de ce post
    (si j'avais su je me serais mis au C# pour faire mon ihm....)
    mais bon, je trouve vraiment que C++ rox donc c# attendra encore un peu

    Je prends note de ton dernire message et je tacherais de tester demain à la première heure. Dsl je peux pas te dire sur le coup si j'ai trouvé solution à mon problème, mon projet VC++ est au boulot et là je ne travaille pas sur Windows et je doute qu'Anjuta gobe les projets de Visual (ptite parenthèse, je fais cette ihm dans le cadre de mon stage... )

    Merci
    ciao

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut
    Re,

    DeusXL, j'ai essayé aujourdh'ui le code que tu m'as fourni et maintenant j'arrive à avoir ce que je voulais. L'activation de chaque icone par 'enter' avec l'association d'une Form bien précise fonctionne. Donc merci à toi et au passage à Neguib

    ++

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/12/2008, 12h27
  2. [ListView] Comment parcourir les éléments avec la touche Tabulation ?
    Par ikeas dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 13/09/2008, 22h16
  3. comment activer la pagination avec un datalist ?
    Par DoraAimeLePoulet dans le forum ASP.NET
    Réponses: 1
    Dernier message: 30/05/2008, 13h37
  4. Réponses: 2
    Dernier message: 08/09/2006, 19h10
  5. [VB.NET] comment écrire du texte avec opengl?
    Par ero_senin dans le forum OpenGL
    Réponses: 2
    Dernier message: 17/01/2005, 13h34

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