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

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 47
    Points : 12
    Points
    12
    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 sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 153
    Points : 25 071
    Points
    25 071
    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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 47
    Points : 12
    Points
    12
    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 sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 153
    Points : 25 071
    Points
    25 071
    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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 47
    Points : 12
    Points
    12
    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 sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 153
    Points : 25 071
    Points
    25 071
    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

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 47
    Points : 12
    Points
    12
    Par défaut
    D'accord merci beaucoup pour tes réponses je vais un peu test tout ça plus tard et je te tiens au courant Sinon, les traducteurs VB / C# marchent bien ?

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 153
    Points : 25 071
    Points
    25 071
    Par défaut
    oui à 95%, les 2 langages sont quasiment identiques niveau fonctionnalités
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 47
    Points : 12
    Points
    12
    Par défaut
    J'ai fini ma notification, mais comme je ne suis pas un expert en graphisme, tu peux me donner ton avais stp (je rajoute l'heure de la sauvegarde via le code) ? Et si tu s'avais comment on peut faire une animation fondu quand elle apparaît et disparaît.

    Nom : 901587Notification.png
Affichages : 125
Taille : 11,3 Ko

    Merci

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 153
    Points : 25 071
    Points
    25 071
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.labelinfo.Text &= dateheure.tostring("dddd dd/MM/yyyy") & " à " & dateheure.tostring("HH\hmm")
    pour le fondu, il faut jouer sur la propriété opacity du form, qui est à définir entre 0 et 1
    donc sur form_load (ou sub new) faire me.opacity = 0 et timeropacity.Start (mettre l'interval à 30 ms)
    et sur le .tick
    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
    select case _timeropacity.interval
      case 30 ' apparition
        if me.opacity < 1 then
          me.opacity += 1/25
        else
          timeropacity.interval = 3000
        end if
      case 3000 ' tempo affichage
        timeropacity.interval = 50
      case 50 ' disparition
        if me.opacity > 0 then
          me.opacity -= 1/25
        else
          timeropacity.stop
          me.dispose
        end if
      end select
    (j'utilise l'interval comme variable d'état (apparition/affichage/disparition))
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Expert confirmé
    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
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    bonsoir,

    Je ne veux pas te retrancher dans l avancée de ton projet mais au lieu d utiliser un timer pourquoi ne pas utiliser le composant FileSystemWatcher qui sera d autant plus pratique a manipuler ?

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 47
    Points : 12
    Points
    12
    Par défaut
    Merci pour l'aide sur l’animation mais j'avais réussi a me débrouiller seul juste après avoir mis la réponse Bon bah reste encore quelques bugs à corriger ^^

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 47
    Points : 12
    Points
    12
    Par défaut
    Salut, wallace1. Pour tout d'avouer, je ne connais pas ce composant. Il pourrait me permettre quoi ?
    Merci

  14. #14
    Expert confirmé
    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
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 47
    Points : 12
    Points
    12
    Par défaut
    D'accord merci je vais prendre le temps de le lire, c'est donc pour me permettre de surveiller si les sauvegardes ne sont pas effacés ?

  16. #16
    Expert confirmé
    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
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    tu surveilles certaines propriétés sur des fichiers ou repertoires :

    Creation
    Suppression
    Renommage
    Attributs
    Date de création
    Nom du dossier
    Nom de fichier
    Date dernier accès
    Date d ecriture
    Taille
    ....etc....

    Lorsqu une action se produit ca declenche l event associé dans lequel tu auras placés le code a executer......
    Timer c est le mal !!

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 47
    Points : 12
    Points
    12
    Par défaut
    Salut,
    j'ai bien lu le (très bon) tuto que tu m'as conseillé. Cependant, j'ai quelques questions pour l'appliquer à mon cas : je devrais en créer un pour chaque sauvegarde et vérifier si elle est pas supprimer ? quand ils parlent de ses limites, est-ce à prendre en compte pour mon cas ?
    Merci beaucoup (et oui je préférerais l'utiliser que un timer, mais je ne le connaissais pas ^^)

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 153
    Points : 25 071
    Points
    25 071
    Par défaut
    le filesystemwatcher permet de surveiller un dossier, et éventuellement tout se qui se passe dans l'arborescence
    donc si tes dossiers sont un peu partout il faut tous les surveiller (sans option d'arborescence à priori)

    normalement il fonctionne bien mais y a des gens qui se plaignent que des fois il ne lève pas d'évènement
    donc si ton code fonctionne tu peux le garder
    de plus en informatique, on essaye toujours de redonder des systèmes incrémentiels par des systèmes qui font tout le job (comme un filesystemwatcher par un parcours complet), donc juste garder ton code actuel suffit (vu qu'il n'est pas gourmand en ressource)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 47
    Points : 12
    Points
    12
    Par défaut
    D'accord merci mais il faudrait que j'en crée un par sauvegarde ? Au bout d'un instant ça va commencer à en faire beaucoup non ?

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 47
    Points : 12
    Points
    12
    Par défaut
    Pour le timer et la notification c'est parfaitement réglé et je vous en remercie. Manque plus à ce que je m'occupe du glisser/déposer

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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