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

VB.NET Discussion :

Comment supprimer un fichier sélectionné dans ma Listbox et comment rafraîchir ma listbox ??


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Par défaut Comment supprimer un fichier sélectionné dans ma Listbox et comment rafraîchir ma listbox ??
    Bonjour,

    Je cherche à supprimer un fichier qui est sélectionné dans ma Listbox après un clique sur un bouton, ce fichier se trouve dans un dossier.
    Je cherche à le supprimer en "dur" c'est à dire qu'il parte dans la corbeille de mon pc et donc par conséquent qu'il disparaisse de ma Listbox lorsque je la rafraîchis.

    Voilà ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	Private Sub Button_Delete (ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
    		Listbox1.Items.Remove(Listbox1.SelectedItem.ToString)
    		Me.Listbox1.Items.Refresh()
    	End Sub
    Ça ne fonctionne pas malheureusement... Je pense à une boucle For ?

    Quelqu'un a une idée ?

  2. #2

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Par défaut
    Merci, mais j'ai plutôt utilisé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim FileToDelete As String
     
    FileToDelete = "C:\Users\Owner\Documents\testDelete.txt"
     
    If System.IO.File.Exists( FileToDelete ) = True Then
     
    System.IO.File.Delete( FileToDelete )
    MsgBox("File Deleted")
     
    End If
    Sauf qu'a la place d'un chemin en dur
    "C:\Users\Owner\Documents\testDelete.txt"
    j'y ai mis Listbox1.SelectedItem..... Ce qui me permet d'effacer n'importe quel élément sélectionné dans ma listbox.
    Ce que je cherche mnt c'est de pouvoir rafraîchir ma listbox instantanément après avoir supprimé mon élément sélectionné.

    J'ai utilisé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		Me.ArchivesListbox.Items.Refresh()
    Mais sans succès, ce n'est pas instantané...
    Des idées ?

  4. #4
    Membre éclairé Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Par défaut
    Bonjour,

    Je ne sais pas comment tu as remplit ta listbox, mais il suffit peut-être simplement de refaire cette manip juste après la commande de suppression du fichier, et la listbox apparaîtra de nouveau remplie avec tous les fichiers sauf celui ou ceux supprimés. En pensant bien à faire un listbox.clear() avant.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Par défaut
    J'ai une erreur lorsque je fais Listbox.items.clear() qui me dit :
    System.InvalidOperationException: Opération non valide quand ItemsSource est en cours d'utilisation. Accédez aux éléments et modifiez-les avec ItemsControl.ItemsSource.

  6. #6
    Membre éclairé Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Par défaut
    C'était une erreur à craindre effectivement, c'est pour cela que je t'ai demandé comment tu avais peuplé ta listbox. Comment affiches-tu les items dedans ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Par défaut
    Alors voila ce que j'ai fait pour peupler ma listbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	Public Sub FolderBrowserDialogFunc() 
    		Dim FDB As New FolderBrowserDialog()
    		FDB.SelectedPath = "C:\Users\ism\Documents\SharpDevelop Projects\Dig\bin\Debug\Measurements"
    		Dim List As New SignalAr() 
    			If FDB.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    				Dim Files As FileInfo() = (New DirectoryInfo(FDB.SelectedPath)).GetFiles
    			 	For Each File As FileInfo In Files
    				 	List.Add(New SignalDef("I.png", file.ToString, FDB.SelectedPath, file.CreationTime))
    			 	Next
    				Listbox1.ItemsSource = List	
    			End If
    	End Sub
    Et pour le bouton :
    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
    	Private Sub button_Delete (ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
    		If Me.Listbox1.SelectedItem IsNot Nothing Then
    			Dim FileToDelete As String = CType(Listbox1.SelectedItem, SignalDef).SignalPath & "\" & CType(Listbox1.SelectedItem, SignalDef).SignalName
    				If System.IO.File.Exists(FileToDelete) = True Then
    					System.IO.File.Delete(FileToDelete)
    					Forms.MessageBox.Show("File Deleted")
     
    '					Listbox1.ItemsSource = List
    '					Listbox1.Items.Refresh()
    '					Listbox1.Items.Remove(FileToDelete)
    				End If
    		Else
    			'Nothing is selected
    		End If
    	End Sub
    Voilà ce que j'ai fait, je suis un peu perdu je dois l'avouer. Je précise que la suppression fonctionne très bien mais l’actualisation de ma listbox ne ce fait que lorsque je quitte l'app or je voudrais que ce soit instantané.

  8. #8
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Il faut mettre à jour ton "itemsSource", donc ce que tu peux faire c'est de déclarer ton itemsSource "List (Of SignalAr)" en portée global afin qu'il soit disponible dans le code de ta classe pour le mettre à jour :

    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
     
    Class MainWindow
     
        Private m_SignalAr as List(of SignalAr)
     
        Sub New()
            InitializeComponent()
            m_SignalAr = new List(of SignalAr)
        End Sub
     
        Private Sub button_Delete (ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs) Handles button_Delete.Click
            For Each it In Listbox1.SelectedItems
                m_SignalAr.Remove(it)
            Next
            Listbox1.ItemsSource = Nothing
            Listbox1.ItemsSource = m_SignalAr
        End Sub
     
    End Class
    Un truc du genre pas testé

    a+

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Par défaut
    Merci Wallace1, mais voilà ce que j'ai fait, je ne crois pas que ce soit très propre mais ça fonctionne :

    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
    	Private Sub button_Delete (ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
    		If Me.Listbox1.SelectedItem IsNot Nothing Then
    			Dim FileToDelete As String = CType(Listbox1.SelectedItem, SignalDef).SignalPath & "\" & CType(Listbox1.SelectedItem, SignalDef).SignalName
    				If System.IO.File.Exists(FileToDelete) = True Then
    					System.IO.File.Delete(FileToDelete)
    					Forms.MessageBox.Show("File Deleted")
     						Dim List As New SignalAr() 
    						Dim FolderCsvPath As String = "C:\Users\ism\Documents\SharpDevelop Projects\Dig\bin\Debug\Measurements" 'ici j'aimerai mettre quelque chose dynamique et non pas une adresse en dur...
    						Dim Files As FileInfo() = (New DirectoryInfo(FolderCsvPath)).GetFiles
    						For Each File As FileInfo In Files
    					 		List.Add(New SignalDef("I.png", file.ToString, FolderCsvPath, file.CreationTime))
    						Next	
    						Listbox1.ItemsSource = List	
    				 		Listbox1.Items.Refresh()
     
    				End If
    		Else
    			'Nothing is selected
    		End If
    	End Sub
    Donc ceci fonctionne mais je ne sais pas si c'est la bonne manière donc je vais étudier ta réponse merci.

    Sinon je cherche à mettre un messagebox avec 2 boutons yes/no sans passer par le xaml c'est à dire invoquer un messagebox avec déjà ces 2 boutons :

    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
    	Private Sub button_Delete (ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
    		If Me.Listbox1.SelectedItem IsNot Nothing Then
    			Dim FileToDelete As String = CType(Listbox1.SelectedItem, SignalDef).SignalPath & "\" & CType(Listbox1.SelectedItem, SignalDef).SignalName
    				If System.IO.File.Exists(FileToDelete) = True Then
                                     Dim FileNameToDelete As String = CType(Listbox1.SelectedItem, SignalDef).SignalName
    				   If Forms.MessageBox.Show("Are you sure you want to delete : " & FileNameToDelete & " ? ") 'j'aimerai invoqué ici un messagebox avec 2 boutons : yes/no ??
    					System.IO.File.Delete(FileToDelete)
    					Forms.MessageBox.Show("File Deleted")
     						Dim List As New SignalAr() 
    						Dim FolderCsvPath As String = "C:\Users\ism\Documents\SharpDevelop Projects\Dig\bin\Debug\Measurements"
    						Dim Files As FileInfo() = (New DirectoryInfo(FolderCsvPath)).GetFiles
    						For Each File As FileInfo In Files
    					 		List.Add(New SignalDef("I.png", file.ToString, FolderCsvPath, file.CreationTime))
    						Next	
    						Listbox1.ItemsSource = List	
    				 		Listbox1.Items.Refresh()
     
    				End If
    		Else
    			'Nothing is selected
    		End If
    	End Sub
    Donc j'ai rajouté ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                                     Dim FileNameToDelete As String = CType(Listbox1.SelectedItem, SignalDef).SignalName
    				   If Forms.MessageBox.Show("Are you sure you want to delete : " & FileNameToDelete & " ? ")
    Mais je n'ai qu'un bouton "ok" je cherche à avoir un yes/no ?? Quelqu'un connait la procédure ?

    Edit :

    J'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim FileNameToDelete As String = CType(Listbox1.SelectedItem, SignalDef).SignalName
    				   If Forms.MessageBox.Show("Are you sure you want to delete : " & FileNameToDelete & " ? ", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)
    Mais j'obtiens un message d'erreur : La résolution de surcharge a échoué, car aucun 'Show' accessible ne peut être appelé sans conversion restrictive : (BC30519)
    Une idée ?

    Edit2: j'ai trouvé ! If Forms.MessageBox.Show("Are you sure you want to delete : " & FileNameToDelete & " ? ", "caption", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)[/CODE]
    il manquait un paramètre tt simplement lol ===> Show(String, String, MessageBoxButtons, MessageBoxIcon)
    Merci !

  10. #10
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Merci Wallace, mais voilà ce que j'ai fait, je ne crois pas que ce soit très propre mais ça fonctionne :
    Euhhh...... en tout état de cause tu as mis en place ce que je t'ai dis donc je ne vois pas où est le problème......

    Mais je n'ai qu'un bouton "ok" je cherche à avoir un yes/no ?? Quelqu'un connait la procédure ?
    En WPF la classe messageBox est accessible depuis l'espace de noms :
    Contrairement à du WinForms qui se situe dans :
    Le référentiel : https://msdn.microsoft.com/en-us/library/ms602949.aspx

    A+

  11. #11
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Par défaut
    Merci Wallace1 j'ai pu régler mon problème de messagebox !
    Merci pour tes réponses et le temps que tu m'as consacré !

  12. #12
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Par défaut
    Bonjour,

    Je rencontre en fait un problème dans ma sélection d'items. En effet j'arrive bien à cocher mes items dans ma listbox (ihm), cependant lorsque je mets des points d'arrêts dans mon programme pour visualiser étape par étape alors je ne retrouve qu'une seule valeur dans ma variable (FilesSelected), or j'ai coché 2 cases donc je dois retrouver 2 valeurs dans ma variable (2 adresses et 2 noms de fichier) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	Public sub Listbox1_SelectionChanged(ByVal sender As Object, ByVal e As SelectionChangedEventArgs) Handles ListBox1.SelectionChanged
    		If Me.Listbox1.SelectedItem IsNot Nothing Then 	
    		FileSelected = CType(Listbox1.SelectedItem, SignalDef).SignalPath + "\" + CType(Listbox1.SelectedItem, SignalDef).SignalName
    		Else
    			FilesSelected = Nothing 'Nothing is selected
    		End If
    	End Sub
    Donc je pense à faire une boucle For mais comment je ne sais pas... quelqu'un pourrait-il m'aider ??

  13. #13
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    En effet j'arrive bien à cocher mes items dans ma listbox (ihm)
    Tu dis cocher donc tu as implémentés une CheckedListbox ou une ListBox ???

    Si c'est un problème de sélection dans une simple ListBox alors il faut boucler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For each it in Listbox.SelectedItems
     
    Next
    Après il faudrait aussi préciser quel est le type de ta variable FileSelected ????

    A+

  14. #14
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Par défaut
    Merci Wallace1,

    C'est une simple listBox.

    Voici ce que j'ai fait mais ne fonctionne pas, enfin si fonctionne mais me récupère la même valeur 2 fois si coche 2 fois ect.. alors que je coche 2 items différents il me récupère le mm que j'ai coché en 1er, si je coche 3 items il me met dans ma variable "l" 3 fois le 1er item que j'ai coché etc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    		Dim l As New List(Of String)
    		If Listbox1.SelectedItem IsNot Nothing Then
    			For Each Item As SignalDef In Listbox1.SelectedItems
    					l.Add(CType(Listbox1.SelectedItem, SignalDef).SignalPath + "\" + CType(Listbox1.SelectedItem, SignalDef).SignalName)
    					'FilesSelected = CType(Listbox1.SelectedItem, SignalDef).SignalPath + "\" + CType(Listbox1.SelectedItem, SignalDef).SignalName
    			Next					
    		Else
    					'Nothing is selected
    					l = Nothing
     
    		End If

  15. #15
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bon si ce n'est pas une CheckListBox alors utilises stp les bons termes ça fera gagner du temps à tout le monde dans la compréhension du problème :

    ---> On ne dit pas Cocher mais Sélectionner ou Mettre en surbrillance !


    Tu ne m'as pas dis quel était le type de ta variable FilesSelected ??

    Breff/...... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       Public Sub Listbox1_SelectionChanged(ByVal sender As Object, ByVal e As SelectionChangedEventArgs) Handles Listbox1.SelectionChanged
            If Listbox1.SelectedItems.Count > 0 Then
                Dim formatTxt As String = String.Empty
                For Each it As SignalDef In Listbox1.SelectedItems
                    formatTxt &= it.SignalPath & "\" & It.SignalName & vbNewLine
                Next
                MsgBox(formatTxt)
            End If
        End Sub
    A+

Discussions similaires

  1. Comment récupérer les élements sélectionnés d'une ListBox ?
    Par Bleuarff dans le forum Composants VCL
    Réponses: 11
    Dernier message: 23/02/2013, 07h36
  2. [XL-2007] Supprimer les éléménts sélectionnés d'une ListBox
    Par Maxim0 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/07/2011, 23h05
  3. Supprimer l'item sélectionné d'un ListBox en MVVM
    Par Edtech dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 07/03/2011, 16h18
  4. comment supprimer un attribut ou un element d un fichier xml
    Par ryoussef19 dans le forum Visual C++
    Réponses: 11
    Dernier message: 07/08/2007, 15h16
  5. Réponses: 2
    Dernier message: 17/08/2005, 15h40

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