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

Windows Forms Discussion :

[C#] Suppression d'un item dans une listview


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut [C#] Suppression d'un item dans une listview
    Bonjour,

    Cela fait plusieurs jours que je bataille pour supprimer un item dans une listview.

    Je m'explique: j'utilise une listview pour afficher un ensemble d'images, je veux pouvoir supprimer certaines de ces images a partir de la listview.

    Le problème c'est que lors de la suppression de l'image
    (File.Delete(monimage)) je tombe sur une erreur 'System.IO.IOException' dans mscorlib.dll et ce car l'image en question est utilisée par un autre processus.

    Donc pour pallier à cela, j'ai essayé de d'abord supprimer l'image de la listview en essayant plusieurs commandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Images.Images.Clear();
    View_Pictures.LargeImageList.Images.Clear();
    View_Pictures.Items.Clear();
    Mais j'ai toujours le meme probleme et mon image ne se supprime tjs pas

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Le souci est en amont.
    Montre nous le code de remplissage de ta ListView avec tes images.
    En fait l'idée est de charger l'image dans un Bitmap intermediaire afin de libérer d'emblée le flux.
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    DrQ
    DrQ est déconnecté
    Membre expérimenté
    Avatar de DrQ
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 388
    Points : 1 515
    Points
    1 515
    Par défaut
    Comme neguib, je pense aussi que le problème est en amont.
    Ca pourrait venir du fait que quand tu crées l'image, tu ouvres le fichier mais tu ne le refermes pas.
    1)http://www.developpez.com/cours/
    2)Recherche
    3)Posez votre question en suivant les règles
    _oOo-DrQ-oOo_

  4. #4
    Membre régulier
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut
    Merci beaucoup, je ne suis pas encore sur le code mais j essaye dès cet après midi de refaire le code du chargement des images.

    En fait l'idée est de charger l'image dans un Bitmap intermediaire afin de libérer d'emblée le flux.
    => Tu peux m'en dire plus ???

    edit

    J'ai rempli ma listview en utilisant ce type de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    foreach(FileInfo fil in file)
    {
          if(fil.Extension==".JPG")
          { Images.Images.Add(Image.FromFile((folder+"\\"+fil.ToString()).GetThumbnailImage(80,80,null,IntPtr.Zero));		     ListViewItem listItem = new ListViewItem();
    	     listItem.Text = fil.ToString();
    	     listItem.ImageIndex = i;
                 View_Pictures.Items.Add(listItem);
    	     i++;
           }
    }
    Ou Images est ma collection d'images utilisée dans le LargeImageList de la listview (View_Pictures).

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par Popof
    Images.Images.Add(Image.FromFile((folder+"\\"+fil.ToString()).GetThumbnailImage(80,80,null,IntPtr.Zero))...
    Voilà où se trouve le souci, car ceci garde le flux ouvert tout le temps de l'application. Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Image img = Image.FromFile(blablabla);
    //Bitmap Intermediaire :)
    Bitmap bmp = new Bitmap(img);
    //et maintenant tu ne te sers uniquement que de bmp
    //ce qui permet la libération du flux sous-jascent
    img.Dispose ();
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  6. #6
    Membre régulier
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut
    Non, j'ai toujours le meme problème ...

    J'ai modifié le code de l'ajout d'items
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Image imgtemp = Image.FromFile(folder+"\\"+fil.ToString()).GetThumbnailImage(80,80,null,IntPtr.Zero);
     
    Bitmap bmptemp = new Bitmap(imgtemp);
    Images.Images.Add(bmptemp);
    imgtemp.Dispose();
    Lorsque je supprime mon image je fais ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private void menuItemSupprimer_Click(object sender, System.EventArgs e)
    		{
    			Photo photo;
    			int focused;
    			photo = (Photo) View_Pictures.FocusedItem.Tag;
    			focused = View_Pictures.FocusedItem.Index; 
     
    			View_Pictures.FocusedItem.Remove();
    			//Images.Images.RemoveAt(focused+1);
    			View_Pictures.Refresh();			
    			File.Delete(photo.getFolder()+"\\"+photo.getName());	
     
    		}
    Le problème étant que View_Pictures.FocusedItem.Remove() m enlève l item de la listview mais l'image reste dans la collection Images.

    J'ai essayé d' enlever l image de ma collection d'images mais l'affichage se retrouve décalé.
    Et au final j'ai toujours le probleme de suppression de fichier

  7. #7
    Membre régulier
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut
    Bon alors en désespoir j'ai recodé mon appli et au moment de faire le code de suppression des images et bien .... sa marche

    Pour ceux qui sont intéressés (s il y en a...)

    Chargement de la listview
    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
    while(ie.MoveNext())
    			{
    				FileInfo file = new FileInfo((String)ie.Current);
    				Photo photoTemp = new Photo(file.Name,file.DirectoryName,file.Length);	
     
    				ListViewItem listItem = new ListViewItem();
    				listItem.Text = photoTemp.getName();
    				listItem.ImageIndex = i;
    				listItem.Tag=photoTemp;
     
    				Image monImage = Image.FromFile(file.FullName,false);
                    imgLV.Images.Add(monImage,System.Drawing.Color.Transparent);
    				monImage.Dispose();
    				List_Photo.Items.Add(listItem);
    				i++;	
    			}
    Suppression de l'image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ListView.SelectedIndexCollection indexes = List_Photo.SelectedIndices;
     
    			int i=0;
    			foreach ( int index in indexes )
    			{
    				Photo myPhoto = (Photo) List_Photo.Items[index-i].Tag;
    				List_Photo.Items.RemoveAt(index-i);
    				File.Delete(myPhoto.getFolder()+"\\"+myPhoto.getName());
    				i++;
    			}

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

Discussions similaires

  1. Suppression d'item dans une ListView via des CheckBox (Type boite mail)
    Par Berlo56 dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 27/03/2014, 09h40
  2. item dans une listview personalisé
    Par omarouen dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 29/03/2012, 10h37
  3. Ajouter un item dans une listView
    Par vto59 dans le forum C#
    Réponses: 5
    Dernier message: 04/02/2010, 16h23
  4. Selection d'un item dans une listview
    Par skunkies dans le forum Windows Forms
    Réponses: 3
    Dernier message: 22/12/2008, 16h01
  5. [VB.NET] Suppression d'un item dans une listview
    Par Remedy dans le forum Windows Forms
    Réponses: 5
    Dernier message: 17/07/2006, 16h00

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