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 :

Utilisation d'une progressBar


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 71

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 304
    Par défaut Utilisation d'une progressBar
    Bonsoir à tous
    Pour ouvrir un form qui se nomme 'VisuAffches' j'utilise un menu qui se trouve dans un form principal
    Hors visuaffiches est assez long à s'afficher
    Aussi je voudrai mettre une progressbar pour patienter
    Mais je ne sais pas où la placer : dans le menu principal ou dans la form visuaffiches
    Pour info je vous mets les codes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub AffichesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AffichesToolStripMenuItem.Click
            VisuAffiches.Show()
        End Sub
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     Private Sub LstFill(ByVal ipath As String)
            ipath = "C:\AffichesModifs"
            Dim xx As Integer = 0
            Try
                Dim ist As String
                Dim i As Integer = 0
                Dim opt As System.IO.SearchOption = System.IO.SearchOption.TopDirectoryOnly
                Me.Cursor = Cursors.WaitCursor
                With lstvItem
                    .BeginUpdate()
                    .Clear()
                End With
     
                imglst.Images.Clear()
     
                ReDim imgPaths(0)
     
                For Each ist In Directory.GetFiles(ipath, "*", opt)
                    If ftype.Contains(Path.GetExtension(ist)) = True Then
                        ReDim Preserve imgPaths(i)
                        imgPaths(i) = ist
     
                        Select Case Path.GetExtension(ist)
                            Case Is = ".jpg", ".jpeg"
                                imglst.Images.Add(My.Resources.jpg)
                        End Select
     
                        With lstvItem
                            .Items.Add(Path.GetFileNameWithoutExtension(ist), i)
                            .Items.Item(i).SubItems.Add(ist)
                        End With
                        xx += 1
                        i += 1
                    End If
                Next
                Me.Cursor = Cursors.Arrow
                lstvItem.EndUpdate()
                Application.DoEvents()
     
                If Me.lstvItem.Items.Count <> 0 Then
                    For i = 0 To imglst.Images.Count - 1
                        Dim img As Image = Image.FromFile(imgPaths(i))
                        Dim w As Double = img.Width / 5
                        Dim h As Double = img.Height / 5
                        imglst.Images.Item(i) = Image.FromFile(imgPaths(i)).GetThumbnailImage(w, h, Nothing, IntPtr.Zero)
                        ListBox1.Items.Add(imgPaths(i))
                        lstvItem.RedrawItems(i, i, True)
                        Application.DoEvents()
                    Next
                End If
     
            Catch ex As Exception
     
            End Try
     
            If lstvItem.Items.Count <> 0 Then
     
            End If
     
        End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Private Sub VisuAffiches_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            LstFill(ipath)
        End Sub
    Merci de bien vouloir me guider

  2. #2
    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
    Bonsoir Jean-Luc80,

    Si le chargement de ton Listview est long alors avant tout il est fort recommandé de mettre à jour ta ListView depuis 1 threadUI.

    Après cela tu sauras ou placer le chargement de ta Progressbar.

    Une piste : le composant BackgroundWorker te permettra de faire ces 2 opérations à savoir :
    - Afficher en temps réel les infos dans ton Listview sans que la fenêtre ne soit gelée
    - mise à jour d'une progressbar éventuellement

    PS : pour avoir une idée du fonctionnement du BGW :
    http://www.developpez.net/forums/d13...p/#post7611213


    A+

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 71

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 304
    Par défaut
    Bonjour
    J'ai essayé ton idée mais ça ne marche pas terrible
    J'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
            LstFill(ipath)
        End Sub
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Private Sub VisuAffiches_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            If Not BackgroundWorker1.IsBusy Then
                BackgroundWorker1.RunWorkerAsync()
            End If
        End Sub
    Le form s'affiche instantanément mais le sablier tourne et rien ne se remplit

  4. #4
    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
    Bonsoir Jean-Luc80,



    Si la programmation était aussi simple que cela alors tout le monde se prétendrait ingénieur et gagnerait en 1 mois ce qu'un français moyen peut espérer gagner en 2 mois minimum !!!

    Donc pour résumer je ne t'ai pas proposer de placer une Sub dans une autre...o_O ??
    Ce que je t'ai dis c'est de charger les éléments de ta Listview depuis un ThreadUI ..... donc le plus simple c'est de le faire grâce au BGW.

    Lorsqu'on veut éviter qu'une fenêtre ne gèle et mettre à jour son interface en même temps (pour des opérations assez longues) il faut dissocier :

    - Le thread (BGW)
    - les éléments qu'on mets à jour dans l'interface (ajouter au fur et à mesure les ListviewItems dans un listview)


    En gros :

    - on fait les grosses opérations de traitement dans le "BGW.DoWork"
    - lorsque tu dois mettre à jour ton interface alors tu sors temporairement du thread grâce à "BGW.ReportProgress" (Tu peux utiliser 2 arguments dans sa signature : Integer et Object)
    - et tu reviens dans le thread si le traitement dois continuer
    - tu finis ta course dans le "BGW.RunWorkerCompleted".

    Grossomodo ton code dans lstfill() tu devras le repenser car il n'est absolument pas adapté pour être contenu dans un Thread.
    BeginUpdate et EndUpdate sont à proscrire bien évidement car pas compatible !

    Bon allez je sais que tu n'es généralement pas très très reconnaissant de l'aide qu'on t'apporte mais je vais tout de même de faire un petit exemple.
    Ça sera à toi de l'adapter à tes besoins


    A+ tard

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 71

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 304
    Par défaut
    je sais que tu n'es généralement pas très très reconnaissant de l'aide qu'on t'apporte
    Je ne vois pas pourquoi tu dis ça
    Ce n'est pas parce qu'une fois j'ai laissé tomber une de tes explications que je ne suis pas reconnaissant de l'aide que je trouve sur ce site
    (Ce jour là ça n'allait pas bien du tout mais je n'ai pas renoncé à faire ce que tu m'avais expliqué!!)
    Merci de m'aider et a +
    Jean-Luc

  6. #6
    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
    Voilà qui devrait te mettre l'eau à la bouche :

    http://wallace87000.upd.fr/Backgroun...xplanation.zip

    NB : Pour introduire le concept de ThreadUI j'ai opté pour la lecture d'un fichier text ".vb" (placé dans le répertoire ...Bin du projet) et la mise à jour d'1 Listview et d'une progressbar.

    Ce projet est paramétré comme suit :

    - Listview1 comporte 2 colonnes qui seront mises à jour en corrélation avec 1 Progressbar
    - Extension du Listview permettant ainsi de ne pas laguer lors de l'ajout des ListviewItems (effet visuel adapté à Aero depuis Vista)
    - Défilement auto lors de l'ajout des items
    - 1 BackgroundWorker (ReportProgress non utilisé car j'utilise 2 délégués à la place)
    - 2 délégués (1 pour mettre à jour la progressbar et 1 pour mettre à jour le composant Listview1)
    - 1 gestionnaire d'évènement "FormClosing" qui empêche la fermeture de l'appli lorsque le Thread est en cours

    ...etc.....

    NB : inutile de charger le fichier dès l'ouverture du programme il,se charge tout seul !

    J'espère que tu auras des questions cette fois-ci ou que tu reviendras dire si ca fonctionne.


    Allez bonne lecture. A+

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

Discussions similaires

  1. Utilisation d'une Progressbar
    Par Rogue 9 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/05/2008, 16h48
  2. [VB6] Utiliser une Progressbar (barre de progression)
    Par Sytchev3 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 29/03/2006, 14h57
  3. Utilisation d'une progressbar ?
    Par RiiiDD dans le forum Composants VCL
    Réponses: 6
    Dernier message: 08/09/2005, 11h28
  4. utilisation d'une ProgressBar
    Par knittel02 dans le forum C++Builder
    Réponses: 1
    Dernier message: 25/12/2004, 23h04
  5. [C#] Utilisation d'une ProgressBar pour un téléchargement
    Par snoof dans le forum Windows Forms
    Réponses: 10
    Dernier message: 04/10/2004, 19h37

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