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 :

Problème timer et divers petits bugs VB.NET


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 47
    Par défaut Problème timer et divers petits bugs VB.NET
    Bonjour,
    j'ai un timer qui toutes les secondes, vérifie que les path (chemin d’accès) de certains dossiers sauvegardés (je fait un logiciel de sauvegarde automatique) soit toujours existant, et si le dossier a été supprimé de l'ordinateur, il supprime le path d'une listview qui regroupe les sauvegardes effectuées. Cependant, si j'en supprime une, le premier coup de timer (au bout d'une seconde) va bien supprimer la sauvegarde que je supprime(la première dans mes tests), mais le deuxième, va supprimer la deuxième sauvegarde alors qu'elle existe toujours, etc... Lorsque j'effectue une nouvelle sauvegarde après une suppression d'une sauvegarde sur Windows, elle s'affiche dans ma listview puis une seconde après (coup de timer), elle est supprimée.
    Voici le code de mon timer et en lien le code de ma fenêtre qui commence a être long :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub TimerRefresh_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerRefresh.Tick
        For x As Integer = ListSauvegarde.Items.Count - 1 To 0 Step -1
            If Not File.Exists(ListePath(x)) Then
                ListSauvegarde.Items.RemoveAt(x)
            End If
        Next
    End Sub
    http://pastebin.com/gFs84UtA

    Si vous pouvez m'aider, merci

    PS : Je profite de mon sujet pour vous demander de l'aide sur d'autres petits bugs où je suis bloqué : je n'arrive pas à afficher des notifications avec NotifyIcon. Je vous donne mon code pour la faire apparâitre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    If My.Settings.Notification = True Then
        IconNotification.BalloonTipIcon = ToolTipIcon.Info
        IconNotification.BalloonTipTitle = "Nouvelle sauvegarde"
        IconNotification.BalloonTipText = "Une nouvelle sauvegarde a  été effectuée"
        IconNotification.Visible = True
        IconNotification.ShowBalloonTip(1000)
    End If
    J'ai bien mit une icône dans les propriétés de mon NotifyIcon. Je précise que j'ai essaie dans un programme vide avec juste un bouton et une notification et ça ne marche pas non plus. Je suis sous Windows 10, c'est peut-être cela ?

    Et je voudrais savoir aussi si vous savez comment accorder le "e.Effect = DragDropEffects.All" uniquement si on glisse un dossier dans une listbox.

    Merci beaucoup

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    Citation Envoyé par Programmeur13 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub TimerRefresh_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerRefresh.Tick
        For x As Integer = ListSauvegarde.Items.Count - 1 To 0 Step -1
            If Not File.Exists(ListePath(x)) Then
                ListSauvegarde.Items.RemoveAt(x)
            End If
        Next
    End Sub
    vu que tu ne supprimes pas l'élément de ListePath, au deuxième tick quand x vaut 0 (premier tour) tu testes si ListePath(0) existe, or non, et on le savait lors du 1er tick et qu'on l'a supprimé de ListSauvegarde
    sauf que là tu es sur x = 0 mais dans ListSauvegarde c'est maintenant le 2ème qui a pris cette place (et ainsi de suite)


    Citation Envoyé par Programmeur13 Voir le message
    Et je voudrais savoir aussi si vous savez comment accorder le "e.Effect = DragDropEffects.All" uniquement si on glisse un dossier dans une listbox.
    il faut tester ce qui est draggé, ca se trouve dans e
    de mémoire ca doit etre e.Data.getdataformats, et il faut tester s'il contient le truc qui dit que c'est fichier (je ne sais pas s'il y a une distinction avec fichier, mais tu peux la faire avec system.io.path après)
    enfin tu mets un point d'arret à ce moment et un coup d'espion express pour regarder ce qu'il faut exactement


    concernant le notifyicon je ne suis pas expert, il doit fonctionner sur win10, mais tu peux aussi afficher une form perso en bas à droite de l'écran pendant tant de temps (ce qui permet au passage de coller visuellement avec ton appli, comme d'autres applis le font)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 47
    Par défaut
    Merci pour ta réponse très complète et rapide.
    Pour le timer, c'est vrai que je n'y avais pas pensé. Cependant, pourrais-tu me montrer comment faire (vu qu'il faudrait remonter tous les items d'un rang dans le tableau et enlever une case). Pour le glisser/déposer, j'ai bien cherché mais je n'ai pas trouvé de distinction fichier/dossier dans le "e.Data.GetDataPresent". Enfin, pour la notification, je pense que je vais le faire par une fenêtre comme tu as dit.
    Merci encore

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    / timer /
    on a pas tout le code mais j'imagine que ListePath est un list(of string)
    dans lequel on peut faire un removeAt, donc au moment de faire un removeAt sur l'interface il faudrait le faire sur la collection ListePath aussi
    par contre pour bien faire il faudrait rester au même x dans ce cas (pour tester le nouveau sur ce rang)

    il y aussi le for each, qui est parfois plus pratique que le for
    par contre il faut penser à faire un .tolist sur la collection pour éviter un problème de collection modifiée pendant l'itération
    enfin si les 2 lignes ci dessus t'embrouillent plus qu'autre chose fait comme si elles n'étaient pas là

    pour t'embrouiller encore plus je pourrais aussi ajouter que l'avantage de wpf c'est qu'une collection affichée travaille directement sur la collection de données, plutot que de la "dupliquer" comme en windows forms


    / drag drop /
    comme je l'ai dit s'il n'y a pas de distinction fichier dossier, tu peux tester si c'est un (ou plusieurs) fichiers ou dossiers qu'on te passe
    en filtrant pour ne garder que les dossiers, si aucun dossier alors pas de drop allowed
    avec un peu de chance directory.exist doit retourner false si tu lui donnes un fichier (permettant de faire la distinction) sinon dans system.io.path il y a plein d'instructions liées au système de fichier qui te permettront de tester
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 47
    Par défaut
    J'ai mis tout le code dans un lien Pastebin mais oui en effet il s’agit bien d'un tableau de string. Par contre je n'ai pas compris ce passage :
    par contre pour bien faire il faudrait rester au même x dans ce cas (pour tester le nouveau sur ce rang)
    Sinon, pour le glisser/déposer je ne voit pas comment tester si c'est un dossier puisqu'il n'y a pas de distinction. Si tu pouvais me montre un code.

    Merci

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    pour le x j'ai dit une connerie, vu que tu parcours à l'envers il ne peut pas y avoir de problème

    pour le getdata, tu récupères tout ce qu'il te donne, fichiers et/ou dossier
    et après tu testes chaque élément dans une boucle
    directory.exists c'était une connerie, car si un dossier a le même nom qu'un fichier glissé ca va retourner true alors qu'on aura glissé le fichier

    pour le code j'ai trouvé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim dossierToAdd as new list(of string)
    For Each file As String In DirectCast(e.Data.GetData(DataFormats.FileDrop, False), String())
        ' si file est un dossier then dossierToAdd.add(file)
    Next
    et pour le test : https://www.google.fr/?gws_rd=ssl#q=c%23+test+if+path+is+directory
    traducteur c# / vb.net : http://converter.telerik.com/

    (pour info une recherche en c# et en anglais trouvera toujours plus de réponse)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/05/2010, 15h56
  2. Réponses: 8
    Dernier message: 26/05/2008, 12h24
  3. [MySQL] Divers petits problèmes avec mon script
    Par fourniey dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 26/12/2007, 16h20
  4. [VB.NET] Problème d'installation d'une appli VB.NET
    Par ppzmr dans le forum Windows Forms
    Réponses: 6
    Dernier message: 26/11/2004, 10h09

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