begin process at 2012 02 04 11:44:39
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VB.NET

 > PROGRESSBAR DANS LISTVIEW EN VB.NET

PROGRESSBAR DANS LISTVIEW EN VB.NET


 Information sur la source

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :VB.NET Source .NET ( DotNet ) Niveau :Débutant Date de création :22/03/2005 Vu :16 098

Auteur : FreeZeBiT

Ecrire un message privé
Site perso
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

Voici une petite fonction qui ajoute une ProgressBar dans une ListView sur le ListViewItem souhaité et la colonne souhaitée.
Faîtes toute fois attention car je n'ai pas inclus de contrôle sur les index que l'on donne ni sur d'éventuelles erreurs...

Source

  • Public Function ListView_AddProgressBar(ByRef pListView As System.Windows.Forms.ListView, ByVal ListViewItemIndex As Integer, ByVal ColumnIndex As Integer) As System.Windows.Forms.ProgressBar
  • Dim r As Rectangle
  • Dim pb As New System.Windows.Forms.ProgressBar
  • r = pListView.Items(ListViewItemIndex).Bounds()
  • r.Width = pListView.Columns(ColumnIndex).Width
  • If ColumnIndex > 0 Then
  • r.X = r.X + pListView.Columns(ColumnIndex - 1).Width
  • End If
  • pb.Parent = pListView
  • pb.SetBounds(r.X, r.Y, r.Width, r.Height)
  • pb.Visible = True
  • Return pb
  • End Function
    Public Function ListView_AddProgressBar(ByRef pListView As System.Windows.Forms.ListView, ByVal ListViewItemIndex As Integer, ByVal ColumnIndex As Integer) As System.Windows.Forms.ProgressBar
        Dim r As Rectangle
        Dim pb As New System.Windows.Forms.ProgressBar

        r = pListView.Items(ListViewItemIndex).Bounds()
        r.Width = pListView.Columns(ColumnIndex).Width
        If ColumnIndex > 0 Then
            r.X = r.X + pListView.Columns(ColumnIndex - 1).Width
        End If
        pb.Parent = pListView
        pb.SetBounds(r.X, r.Y, r.Width, r.Height)
        pb.Visible = True

        Return pb
    End Function



 Sources de la même categorie

Source .NET (Dotnet) MODIFICATION DATE DE WINDOWS EN VB.NET ET VBA par us_30
Source avec Zip Source avec une capture Source .NET (Dotnet) ENVOI DE MAIL AVEC PIÈCE JOINTE par EhJoe
Source .NET (Dotnet) AMUSONS NOUS AVEC UN LABEL ^^ par Adn56
Source avec Zip Source avec une capture Source .NET (Dotnet) UN NAVIGATEUR INTERNET EN VB.NET par azrti
Source avec Zip Source .NET (Dotnet) CONVERSION DE DEVISE MONAITAIRE VIA UN SERVICE WEB par bigmonkey7

Commentaires et avis

Commentaire de Benouille le 29/03/2005 15:51:27

exellent!

Commentaire de GLLNS le 15/06/2005 12:29:13

Thanks

Commentaire de innosoft le 11/07/2005 05:35:11

good

Commentaire de vingaboy le 09/08/2005 04:12:27

Salut, je trouve le code simple et ca donne l'opportunité d'ajouter d'autre type control comme ComboBox et TrackBar et bien d'autre...

Apres avoir tester le code et réussi, j'ai trouver des problèms, il s'agit du redimension de la colonne en dessous duquel il y'a le progressbar, j'ai cherché un événement pour le redimensionnement d'une colone de ListView mais y'en a pas???
Aussi un autre probleme, c'est lorsque j'ai plusieur lignes, et chaque ligne à son propre progressbar, le positionnemt des progressbar rest static ca change pas lors du défilement des lignes, également j'ai pas trouver l'événement du defiliment des ligne parmi les evenement du ListView???

Je souhaite que quelque à une idée!!!

Commentaire de winsave le 10/08/2005 16:20:59

Mon idée est de redimentionner sur MouseMove.

'// Déclarations :
    Private curLi As ListViewItem
    Private curProgressGlobale As System.Windows.Forms.ProgressBar
    Private CollProgressbarGlobales As New Collection

private sub TestIt
'// 2 colonnes par exemples
     curLi = ListView1.Items.Add("Test")
     curLi.SubItems.Add("") 'progression bar
     curLi.SubItems.Add("0 %") '%

'// on récupére curProgressGlobale pour traitement ultérieur
     curProgressGlobale = ListView_AddProgressBar(ListView1, curLi.Index, 1, CollProgressbarGlobales)

end sub

    Public Function ListView_AddProgressBar(ByRef pListView As System.Windows.Forms.ListView, ByVal ListViewItemIndex As Integer, ByVal ColumnIndex As Integer, ByRef CollProgressbar As Collection) As System.Windows.Forms.ProgressBar
        Dim r As Rectangle
        Dim pb As New System.Windows.Forms.ProgressBar
        Try
            r = pListView.Items(ListViewItemIndex).Bounds()
            r.Width = pListView.Columns(ColumnIndex).Width
            If ColumnIndex > 0 Then
                r.X = r.X + pListView.Columns(ColumnIndex - 1).Width
            End If
            pb.Parent = pListView
            pb.SetBounds(r.X, r.Y, r.Width, r.Height)
            pb.Visible = True
            If Not pb Is Nothing Then
                CollProgressbar.Add(pb)
            End If
        Catch exc As Exception
            MsgBox(exc.Message, MsgBoxStyle.Critical)
        End Try
        Return pb
    End Function


    Private Sub ListView1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        ResizeProgressbars(CollProgressbarGlobales)
    End Sub

    Private Sub ResizeProgressbars(ByRef CollProgressbar As Collection)
'// on redimentionne l'ensemble
        If Not CollProgressbar Is Nothing Then
            Dim curEnum As IEnumerator
            Dim CurProgress As ProgressBar
            curEnum = CollProgressbar.GetEnumerator
            While curEnum.MoveNext
                CurProgress = curEnum.Current()
                CurProgress.Left = ListView1.Columns(0).Width + 5
                CurProgress.Width = ListView1.Columns(1).Width - 5
            End While
        End If

    End Sub


Voili voilou ; par contre l'ajout de deux progressbar sur le même item semble poser pb.

Sam.
http://www.c6pratik.com

Commentaire de FreeZeBiT le 22/08/2005 08:49:58

Effectivement, on est obligé de gérer le redimensionnement ainsi que le défilement manuellement, ce qui n'est pas forcément chose aisée...

Pour redimensionner, le code de Wisave me paraît bon (je ne l'ai pas testé), le seul truc qui me gène est que la procédure ResizeProgressbars est appelée tout le temps depuis le MouseMove, moi je pense que je ne l'appellerai que si le bouton gauche de la souris est enfoncé...

Pour le défilement, je pense que le plus simple serait d'utiliser un Thread de la façon suivante :

    Dim CollProgressBars As Hashtable ' collection des ProgressBar et de leur ListViewItem
    Dim LastTopItem As ListViewItem ' le dernier premier ListViewItem affiché
    Dim thListView As System.Threading.Thread ' le Thread qui gère l'affichage des ProgressBar

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Integer

        With ListView1
            .View = View.Details
            .Columns.Add("colonne 1", (.Width / 2) - 10, HorizontalAlignment.Left)
            .Columns.Add("colonne 2", (.Width / 2) - 10, HorizontalAlignment.Left)

    ' on ajoute des Items et SubItems
            For i = 1 To 20
                Dim li As ListViewItem = .Items.Add("Ligne " & i)
                Dim si As ListViewItem.ListViewSubItem = li.SubItems.Add("")
            Next
        End With
        
        ' on instancie la collection
        CollProgressBars = New Hashtable

' on ajoute des ProgressBars dans nos Items
        ListView_AddProgressBar(ListView1, 0, 1)
        ListView_AddProgressBar(ListView1, 9, 1)
        ListView_AddProgressBar(ListView1, 19, 1)

' on démarre le Thread qui va affiché ou non les ProgressBar si les Items sont visibles
        thListView = New System.Threading.Thread(AddressOf ListView_ScrollProgressBar)
        thListView.Priority = Threading.ThreadPriority.Lowest ' priorité basse : pas besoin de bouffer du proc pour rien
        thListView.Start()
    End Sub

    Private Function ListView_AddProgressBar(ByRef pListView As System.Windows.Forms.ListView, ByVal ListViewItemIndex As Integer, ByVal ColumnIndex As Integer) As System.Windows.Forms.ProgressBar
        Dim r As Rectangle
        Dim pb As New ProgressBar

        r = pListView.Items(ListViewItemIndex).Bounds()
        r.Width = pListView.Columns(ColumnIndex).Width
        If ColumnIndex > 0 Then
            r.X = r.X + pListView.Columns(ColumnIndex - 1).Width
        End If
        pb.Parent = pListView
        pb.SetBounds(r.X, r.Y, r.Width, r.Height)
        pb.Visible = True

' on ajoute notre ProgressBar à notre collection et on conserve l'Item auquel elle appartient
        CollProgressBars.Add(pb, pListView.Items(ListViewItemIndex))

        Return pb
    End Function

    Private Sub ListView_ScrollProgressBar()
        Dim li As ListViewItem
        Dim pb As ProgressBar
        Dim CurTopItem As ListViewItem

        While True
            CurTopItem = ListView1.TopItem ' récupère le premier Item affiché
            If Not LastTopItem Is CurTopItem Then ' s'il est différent d'avant
                For Each li In CollProgressBars.Values ' pour chaque Item contenant une ProgressBar
                    Dim r As Rectangle = li.Bounds() ' récupère ses dimensions
                    If (r.Top >= ListView1.Top) AndAlso (r.Top <= ListView1.Top + ListView1.Height) Then
                     ' si cet Item est bien affiché dans la liste
                        For Each pb In CollProgressBars.Keys ' pour chaque ProgressBar de notre collection
                            If CollProgressBars.Item(pb) Is li Then ' si elle est contenu dans notre Item
                                pb.Top = r.Top ' on place la ProgressBar à la même hauteur
                                pb.Visible = True ' on l'affiche
                            End If
                        Next
                    Else
                     ' si cet Item n'est pas affiché dans la liste
                        For Each pb In CollProgressBars.Keys ' pour chaque ProgressBar de notre collection
                            If CollProgressBars.Item(pb) Is li Then ' si elle est contenu dans notre Item
                             pb.Visible = False ' on la cache
                            End If
                        Next
                    End If
                Next
                LastTopItem = CurTopItem ' on stocke le premier Item affiché
            End If
        End While
    End Sub

    Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        thListView.Abort() ' on n'oublie pas de terminé le Thread avant de quitter le prog
    End Sub

Commentaire de FreeZeBiT le 22/08/2005 09:22:03

On peut aussi tout gérer dans le Thread directement...
Avec cette méthode, on peut utiliser plusieurs ListView sans problème mais je crains que ce ne soit un peu "lourd" si on a beaucoup de ListView et/ou beaucoup d'Items... à voir...

    Private Structure ListViewProgressBarStruct
        Dim oProgressBar As ProgressBar
        Dim oListView As ListView
        Dim oListViewItem As ListViewItem
        Dim ColumnIndex As Integer
    End Structure

    Dim CollProgressBars As Collection
    Dim thListView As System.Threading.Thread

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Integer

        With ListView1
            .View = View.Details
            .Columns.Add("colonne 1", (.Width / 2) - 10, HorizontalAlignment.Left)
            .Columns.Add("colonne 2", (.Width / 2) - 10, HorizontalAlignment.Left)

            For i = 1 To 20
                Dim li As ListViewItem = .Items.Add("Ligne " & i)
                Dim si As ListViewItem.ListViewSubItem = li.SubItems.Add("")
            Next
        End With

        ' instancie la collection des ProgressBars
        CollProgressBars = New Collection

        ' ajoute des ProgressBars dans notre ListView
        ListView_AddProgressBar(ListView1, 0, 1)
        ListView_AddProgressBar(ListView1, 9, 1)
        ListView_AddProgressBar(ListView1, 19, 1)

        ' démarre le Thread qui gère le redimensionnement et le défilement pour les ProgressBars
        thListView = New System.Threading.Thread(AddressOf ListView_ProgressBarThread)
        thListView.Priority = Threading.ThreadPriority.Lowest ' priorité basse : pas besoin de consommer du proc pour rien
        thListView.Start()
    End Sub

    Private Function ListView_AddProgressBar(ByRef pListView As System.Windows.Forms.ListView, ByVal ListViewItemIndex As Integer, ByVal ColumnIndex As Integer) As System.Windows.Forms.ProgressBar
        Dim r As Rectangle
        Dim pb As New ProgressBar

        ' ajoute la ProgressBar dans l'Item du ListView sur la colonne souhaitée
        r = pListView.Items(ListViewItemIndex).Bounds()
        r.Width = pListView.Columns(ColumnIndex).Width
        If ColumnIndex > 0 Then
            r.X = r.X + pListView.Columns(ColumnIndex - 1).Width
        End If
        pb.Parent = pListView
        pb.SetBounds(r.X, r.Y, r.Width, r.Height)
        pb.Visible = True

        ' garde en mémoire les infos sur cette ProgressBar
        Dim lvpb As New ListViewProgressBarStruct
        lvpb.ColumnIndex = ColumnIndex
        lvpb.oListView = pListView
        lvpb.oProgressBar = pb
        lvpb.oListViewItem = pListView.Items(ListViewItemIndex)
        CollProgressBars.Add(lvpb)

        ' retourne la ProgressBar
        Return pb
    End Function

    Private Sub ListView_ProgressBarThread()
        Dim lvpb As ListViewProgressBarStruct

        While True
            For Each lvpb In CollProgressBars
                With lvpb
                    ' redimensionne la ProgressBar sur la colonne
                    .oProgressBar.Width = .oListView.Columns(.ColumnIndex).Width
                    If .ColumnIndex > 0 Then .oProgressBar.Left = .oListView.Columns(.ColumnIndex - 1).Width

                    ' affiche / cache la ProgressBar en fonction que l'Item sur lequel elle se trouve est visible ou non dans la liste
                    Dim r As Rectangle = .oListViewItem.Bounds
                    If (r.Top >= .oListView.Top) AndAlso (r.Top <= .oListView.Top + .oListView.Height) Then
                        .oProgressBar.Top = r.Top
                        .oProgressBar.Visible = True
                    Else
                        .oProgressBar.Visible = False
                    End If
                End With

                Application.DoEvents()
            Next
        End While
    End Sub

    Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        thListView.Abort() ' termine le Thread avant de quitter le prog
    End Sub

Commentaire de dectroo le 06/07/2007 10:19:00

salut, ton code es texcellent mé jarrive pas à le compiler car j'utilse seulement l Vb6 et non pas le .Net
Si quelqu'un peut me traduire le code en Vb6? j'en ai besoin vraiment, ou just s'il ya une outil pour traduire.
merci d'avence.

Commentaire de Mario1095 le 13/01/2008 07:19:40

Pas MAL

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales