none
Afficher les éléments d'une listVieuw RRS feed

  • Question

  • bonjour j'utilise une listVieuw pour lister des fichier HTML.

    Je me demandais si c'était possible qu'au passage de ma souris une fenêtre s'ouvre et affiche le contenu du fichier sur lequel la souris est...

    Merci a vous

    Sarah :D
    mercredi 1 février 2012 15:22

Réponses

  • Très bien. Je vais tacher de t'expliquer ça un peu mieux. 

    J'ai utilisé un objet ListViewItem car il est, tu vas le voir très vite, omniprésent dans ton objet ListView.

    Pour commencer, je vais partir d'une de tes lignes commentées : Tu as essayé d'afficher ta variable elementChoisi dans une MessageBox. PTu as donc surement remarqué que le texte qui s'affichait dans ta MessageBox n'était pas simplement ta chaine de caractères. Tu as du obtenir quelque chose dans ce goût là : ListViewItem: {C:\Users\free-template.html}.

    Pourquoi ? Tout simplement parce que ton appel à listView1.Items.Add("C:\Users\free-template.html") a IMPLICITEMENT créé un objet ListViewItem. Il a ensuite mis ton texte dans la propriété Text de ce ListViewItem, et enfin, il a ajouté cet objet dans le ListView. Ce qui fait qu'en fait, quand tu appelles SelectedItems[0].ToString(), tu appelles la méthode ToString de ton objet ListView. Cette méthode renvoie une chaine de caractère personnalisée (je n'irai pas plus loin dans le détail, mais si ce sujet t'intéresse, recherche "override ToString()" sur le net, tu devrais trouver des éléments intéressants.)

    Donc, sachant cela, pour récupérer ton texte quand tu cliques sur un élément de ta ListView, il te faudra utiliser un code dans ce style (j'omets volontairement les contrôles de validation, genre vérifier qu'on a bien un SelectedItems[0]):

     

    void listView1_Click(object sender, EventArgs e)
    {
        string elementChoisi = listView1.SelectedItems[0].Text;
        //MessageBox.Show(elementChoisi);
    }
    

     


    Bien, maintenant que tu sais quel fichier est sélectionné, passant à l'affichage. Je suppose que tu souhaites l'afficher dans un contrôle WebBrowser. Tu peux donc, soit l'ajouter dans ta fenêtre, à côté de ta ListView, soit implémenter une mécanique un peu complexe d'ouverture et de fermeture de fenêtres à la volée. 

    On va pour l'instant considérer que tu es dans le premier cas, le second étant peut-être un peu plus ardu à expliquer et à comprendre.

    Donc, tu as un contrôle WebBrowser, nommé webBrowser1. Quand tu cliques sur un élément de ta listView, tu veux changer la source de ce contrôle. Pour ça, c'est très simple : Comme tu sais récupérer le nom du fichier sélectionner grâce au code qui est un peu plus haut, tu as uniquement à naviguer dans ton WebBrowser : 

    void listView1_Click(object sender, EventArgs e)
    {
         string elementChoisi = listView1.SelectedItems[0].Text;
         webBrowser1.Navigate(elementChoisi);
    }

    Tu parlais tout à l'heure de de faire de l'affichage au moment où ta souris passe au dessus d'un élément. Pour ça, on passera par un autre événement : ItemMouseHover. Dans cet événement, tu as un paramètre "e" qui a un propriété Item, de type ListViewItem. Donc, comme on l'a vu plus haut, tu vas pouvoir récupérer le fichier au dessus duquel est la souris, et naviguer dans ton WebBrowser. Exemple de code : 

    void listView1_ItemMouseHover(object sender, ListViewItemMouseHoverEventArgs e)
    {
        string elementChoisi = e.Item.Text;
        webBrowser1.Navigate(elementChoisi);
    }


    Et hop !

    Est-ce que tout cela te suffit ?

     

    Cordialement,

    Sébastien


    Sébastien Putier
    Consultant - Formateur technologies Microsoft
    Blog : http://sputier.wordpress.com
    MCTS Développement d'application Windows 4.0 / Data Access 4.0
    Si un post vous parait utile, n'oubliez pas de le marquer comme utile. S'il répond à votre question, n'oubliez pas de le marquer comme réponse.
    • Modifié Sébastien Putier mercredi 1 février 2012 16:44
    • Marqué comme réponse SarahChou mercredi 1 février 2012 17:05
    • Non marqué comme réponse SarahChou mercredi 1 février 2012 17:08
    • Marqué comme réponse Ciprian Duduiala jeudi 2 février 2012 08:06
    mercredi 1 février 2012 16:42
  • Bonjour Sarah,

    oui c'est possible de redimmenssionner un WebBrowser avec les propriétés Width et Height comme ceci:

     webBrowser1.Width = 1024;
     webBrowser1.Height = 768;
    


    Taille en pixel.

     


    fred on youTube
    PHP MySQL Web Site Creator
    fred
    • Proposé comme réponse Ciprian Duduiala jeudi 2 février 2012 08:12
    • Marqué comme réponse SarahChou jeudi 2 février 2012 08:35
    jeudi 2 février 2012 00:33

Toutes les réponses

  • Bonjour,

    Evidemment, c'est possible. Par contre, si je peux me permettre, fais attention avec ce type d'interface. Si ce n'est pas bien géré, ça peut très très vite devenir particulièrement désagréable pour lui...

    Pour en revenir à la technique, une solution consiste à abonner (au chargement par exemple) tous les ListViewItem de ta ListView au même événement MouseOver, et gérer l'affichage de ce que tu veux dans cet événement.

    Un truc dans ce goût là, par exemple : 

    public void LoadListViewItems() 
    {
        foreach (var fichierHtml in maListeDeFichiersHTML)
        {
        	ListViewItem listViewItem = new ListViewItem();
            //Ici tu mets tout ce que tu veux dans ton ListViewItem
    
        	listViewItem.MouseOver += ListViewItem_MouseOver;
        	listView.Items.Add(listViewItem);
        }
    }
    
    private void ListViewItem_MouseOver(object sender, MouseEventArgs e) 
    {
        //On récupère l'item qui a lancé l'événement
        ListViewItem item = (ListViewItem) sender;
    
        //Maintenant que tu as ton listViewItem, libre à toi d'afficher tout ce que tu veux !
    }
    


    Bon courage !

    Cordialement,

    Sébastien


    Sébastien Putier
    Consultant - Formateur technologies Microsoft
    Blog : http://sputier.wordpress.com
    MCTS Développement d'application Windows 4.0 / Data Access 4.0
    Si un post vous parait utile, n'oubliez pas de le marquer comme utile. S'il répond à votre question, n'oubliez pas de le marquer comme réponse.
    mercredi 1 février 2012 15:38
  • J'aime à rappeler que je suis plus que débutante en c# (c'est peut être pour excuser mes bêtes questions :) )

     

    Merci mais je comprend pas vraiment le but du foreach et tu utilise une listVieuwItem

    voila ce que moi je fais pour ajouter mes fichiers dans ma listvieuw.

    c'est un code simple mais je m'y retrouve j'avoue que je comprend pas comment tu fais pour que mon elementchoisi s'affiche sur le cotès...

     

    Merci bcp

       private void MonTemplate_Load(object sender, EventArgs e)
            {
                
                listView1.Items.Add(@"C:\Users\free-template.html");
                listView1.Items.Add(@"C:\Users\index.html");
            }
    
     private void listView1_Click(object sender, EventArgs e)
            {
    
                if (listView1.SelectedItems.Count > 0)
                {
                    var index = listView1.SelectedItems[0].Index;
                    //MessageBox.Show(index.ToString());
                    elementChoisi = listView1.SelectedItems[0].ToString();
                    //MessageBox.Show(elementChoisi);
                    this.Close();
                }
                
            }
    


    mercredi 1 février 2012 16:02
  • Très bien. Je vais tacher de t'expliquer ça un peu mieux. 

    J'ai utilisé un objet ListViewItem car il est, tu vas le voir très vite, omniprésent dans ton objet ListView.

    Pour commencer, je vais partir d'une de tes lignes commentées : Tu as essayé d'afficher ta variable elementChoisi dans une MessageBox. PTu as donc surement remarqué que le texte qui s'affichait dans ta MessageBox n'était pas simplement ta chaine de caractères. Tu as du obtenir quelque chose dans ce goût là : ListViewItem: {C:\Users\free-template.html}.

    Pourquoi ? Tout simplement parce que ton appel à listView1.Items.Add("C:\Users\free-template.html") a IMPLICITEMENT créé un objet ListViewItem. Il a ensuite mis ton texte dans la propriété Text de ce ListViewItem, et enfin, il a ajouté cet objet dans le ListView. Ce qui fait qu'en fait, quand tu appelles SelectedItems[0].ToString(), tu appelles la méthode ToString de ton objet ListView. Cette méthode renvoie une chaine de caractère personnalisée (je n'irai pas plus loin dans le détail, mais si ce sujet t'intéresse, recherche "override ToString()" sur le net, tu devrais trouver des éléments intéressants.)

    Donc, sachant cela, pour récupérer ton texte quand tu cliques sur un élément de ta ListView, il te faudra utiliser un code dans ce style (j'omets volontairement les contrôles de validation, genre vérifier qu'on a bien un SelectedItems[0]):

     

    void listView1_Click(object sender, EventArgs e)
    {
        string elementChoisi = listView1.SelectedItems[0].Text;
        //MessageBox.Show(elementChoisi);
    }
    

     


    Bien, maintenant que tu sais quel fichier est sélectionné, passant à l'affichage. Je suppose que tu souhaites l'afficher dans un contrôle WebBrowser. Tu peux donc, soit l'ajouter dans ta fenêtre, à côté de ta ListView, soit implémenter une mécanique un peu complexe d'ouverture et de fermeture de fenêtres à la volée. 

    On va pour l'instant considérer que tu es dans le premier cas, le second étant peut-être un peu plus ardu à expliquer et à comprendre.

    Donc, tu as un contrôle WebBrowser, nommé webBrowser1. Quand tu cliques sur un élément de ta listView, tu veux changer la source de ce contrôle. Pour ça, c'est très simple : Comme tu sais récupérer le nom du fichier sélectionner grâce au code qui est un peu plus haut, tu as uniquement à naviguer dans ton WebBrowser : 

    void listView1_Click(object sender, EventArgs e)
    {
         string elementChoisi = listView1.SelectedItems[0].Text;
         webBrowser1.Navigate(elementChoisi);
    }

    Tu parlais tout à l'heure de de faire de l'affichage au moment où ta souris passe au dessus d'un élément. Pour ça, on passera par un autre événement : ItemMouseHover. Dans cet événement, tu as un paramètre "e" qui a un propriété Item, de type ListViewItem. Donc, comme on l'a vu plus haut, tu vas pouvoir récupérer le fichier au dessus duquel est la souris, et naviguer dans ton WebBrowser. Exemple de code : 

    void listView1_ItemMouseHover(object sender, ListViewItemMouseHoverEventArgs e)
    {
        string elementChoisi = e.Item.Text;
        webBrowser1.Navigate(elementChoisi);
    }


    Et hop !

    Est-ce que tout cela te suffit ?

     

    Cordialement,

    Sébastien


    Sébastien Putier
    Consultant - Formateur technologies Microsoft
    Blog : http://sputier.wordpress.com
    MCTS Développement d'application Windows 4.0 / Data Access 4.0
    Si un post vous parait utile, n'oubliez pas de le marquer comme utile. S'il répond à votre question, n'oubliez pas de le marquer comme réponse.
    • Modifié Sébastien Putier mercredi 1 février 2012 16:44
    • Marqué comme réponse SarahChou mercredi 1 février 2012 17:05
    • Non marqué comme réponse SarahChou mercredi 1 février 2012 17:08
    • Marqué comme réponse Ciprian Duduiala jeudi 2 février 2012 08:06
    mercredi 1 février 2012 16:42
  • Je sais vraiment comment te remercie de toute ta patience !! c'est vraiment gentil.

    On sent vraiment qu'on a affaire à des professionnelles qui manquent pas de patience :)

     

    Merci beaucoup

    mercredi 1 février 2012 17:06
  • Juste une dernière question.

     

    Je me demandais si je pouvais adapté la taille de la page html a celle de mon webbrowser

    car comme c'est une petit fênetre on voit pas bien la page qu'on souhaite choisir ;)

     

    Merci encore

    mercredi 1 février 2012 17:08
  • Bonjour Sarah,

    oui c'est possible de redimmenssionner un WebBrowser avec les propriétés Width et Height comme ceci:

     webBrowser1.Width = 1024;
     webBrowser1.Height = 768;
    


    Taille en pixel.

     


    fred on youTube
    PHP MySQL Web Site Creator
    fred
    • Proposé comme réponse Ciprian Duduiala jeudi 2 février 2012 08:12
    • Marqué comme réponse SarahChou jeudi 2 février 2012 08:35
    jeudi 2 février 2012 00:33
  • Bonjour, Sarah,

     

    Je vous recommande de poster une nouvelle question dans un thread nouvel pour éviter les confusions et pour éviter d’avoir des threads longs et difficiles à suivre.

     

    De toute façon, si vous voulez continuer la discussion sur le même thread et la question initiale a reçu déjà une réponse, svp ne la démarquez pas, pour permettre aux autres personnes avec le même problème de profiter de cette solution. Vous pouvez continuer la discussion même si le thread est marqué comme résolu.

     

    Cordialement,

     

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    jeudi 2 février 2012 08:12
  • Merci Cipri pour ces infos supplémentaires j'en prend bonne note :)
    jeudi 2 février 2012 08:37
  • Bonjour,

    Pour l'info, la réponse de fred75 ne correspond pas à la question de Sarah. Ce qu'elle souhaite faire, c'est l'inverse ;-) Redimensionner un contenu pour coller au WebBrowser...

    Cordialement,

    Sébastien


    Sébastien Putier
    Consultant - Formateur technologies Microsoft
    Blog : http://sputier.wordpress.com
    MCTS Développement d'application Windows 4.0 / Data Access 4.0
    Si un post vous parait utile, n'oubliez pas de le marquer comme utile. S'il répond à votre question, n'oubliez pas de le marquer comme réponse.
    jeudi 2 février 2012 09:33