Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1266 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Affichage "Live "dans ListView

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Affichage "Live "dans ListView

n°1915441
picollo
Posté le 15-08-2009 à 18:01:07  profilanswer
 

Bonjour
 
Je m'essaye à VB 2008 (Express Edition).
 
Dans le programme, je lis un fichier .csv pour remplir un ListView.
Je n'ai aucun problème pour lire le fichier et injecter son contenu dans la ListView.
 
Le fichier contenant plus de 2000 lignes, lorsque je lance l'opération, on dirait que le programme ne fait rien,  
et tout d'un coup, le contenu du ListView s'affiche.
 
Ce que j'aimerais, c'est que l'affichage du ListView suive la progression du travail en affichant toujours la dernière ligne ajoutée,  
de façon à ne pas avoir l'impression que le programme est planté.
Un peu comme si j'appuyais sur la touche "Fin" après l'ajout de chaque lignes.
 
J'ai essayé d'utiliser Lst_Result.Refresh() dans la boucle après ajout d'une ligne,
ca donne moins l'impression que le programme est planté, mais c'est pas encore cela.
Ca donne un effet trop flash; et de plus la ListView reste sur les premiers.
 
Comment puis je faire pour que le ListView affiche toujours la dernière ligne ajoutée ?
 
Merci d'avance

mood
Publicité
Posté le 15-08-2009 à 18:01:07  profilanswer
 

n°1915955
picollo
Posté le 17-08-2009 à 19:59:27  profilanswer
 

Salut
 
Il n'y a personne qui peut m'aider ou est ce que je ne suis pas clair dans mes explications?
 

n°1917184
picollo
Posté le 20-08-2009 à 21:57:44  profilanswer
 

Salut
J'ai fini par utiliser "Lst_Result.Items(Ligne).EnsureVisible()" et "Lst_Result.Refresh()"
 
Je vois les données lues dans le fichier s'ajouter dans le ListView.  
Mais sur la fin je recois un message.  
 
"
ContextSwitchDeadlock a été détecté
Message: Le CLR n'a pas pu effectuer de transition du contexte COM 0x20b2ce0 au contexte COM 0x20b2f30 pendant 60 secondes.  
Le thread qui possède le contexte/cloisonnement de destination est probablement en train d'attendre ou de traiter une opération très longue
sans pompage des messages Windows.  
Cette situation a généralement des effets négatifs sur les performances et peut parfois entraîner le blocage de l'application ou une utilisation ininterrompue de la mémoire.  
Pour éviter ce problème, tous les threads STA (Single Threaded Apartment) doivent utiliser des primitives d'attente de pompage (par exemple CoWaitForMultipleHandles)  
et pomper de manière régulière les messages lors des opérations qui sont longues à s'exécuter.
"
 
Ce n'est pas vraiment une erreur, les données du fichier se trouvent bien toutes dans le ListView.
Mais j'aimerais comprendre le message, comment fait on pour "pomper les messages Windows" ?
Enfin, plutôt savoir quoi faire pour qu'il ne s'affiche plus ?
 

Code :
  1. Dim Ligne As Integer = 0
  2. If Btn_Fichier.Enabled() = True Then
  3.    Txt_FichiersResultat.Text = "Veuillez patientez. Sélection et chargement en cours ..."
  4.    OpenFileDialog1.ShowDialog()
  5.    Txt_FichiersResultat.Text = OpenFileDialog1.FileName
  6.    Using MonLecteur As New Microsoft.VisualBasic.FileIO.TextFieldParser(Txt_FichiersResultat.Text)
  7.       MonLecteur.TextFieldType = FileIO.FieldType.Delimited
  8.       MonLecteur.SetDelimiters(";" )
  9.       Dim currentRow As String()
  10.       Try
  11.          currentRow = MonLecteur.ReadFields()
  12.       Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
  13.          MsgBox("Line " & ex.Message & _
  14.          "is not valid and will be skipped." )
  15.       End Try
  16.       While Not MonLecteur.EndOfData
  17.          currentRow = MonLecteur.ReadFields()
  18.          Lst_Result.Items.Add(currentRow(0))
  19.          Lst_Result.Items(Ligne).SubItems.Add(currentRow(1))
  20.          Lst_Result.Items(Ligne).SubItems.Add(currentRow(2))
  21.          Lst_Result.Items(Ligne).SubItems.Add(currentRow(3))
  22.          Lst_Result.Items(Ligne).SubItems.Add(currentRow(4))
  23.          Lst_Result.Items(Ligne).SubItems.Add(currentRow(5))
  24.          Lst_Result.Items(Ligne).SubItems.Add(currentRow(6))
  25.          Lst_Result.Items(Ligne).SubItems.Add(currentRow(7))
  26.          Lst_Result.Items(Ligne).EnsureVisible()
  27.          Lst_Result.Refresh()
  28.          Ligne = Ligne + 1
  29.       End While
  30.       Btn_Fichier.Enabled() = False
  31.       Lst_Result.Focus()
  32.       Lst_Result.Items(Ligne - 1).Selected = True
  33.    End Using
  34. Else
  35.    MsgBox("Le fichier des tirages a déjà été pris en compte" )
  36. End If


 
 
 

n°1917627
otobox
Maison fondée en 2005
Posté le 23-08-2009 à 11:18:19  profilanswer
 

Pas de solution à ton problème, mais peut être une piste pour le contourner : mettre un message (acquisition des données, ceci peut prendre plusieurs minutes) en remplaçant le curseur par le sablier. Eventuellement, gérer un évènement "Annuler" ?


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°1917646
picollo
Posté le 23-08-2009 à 13:40:45  profilanswer
 

Merci pour ta solution, c'est une bonne idée.
je vais voir comment faire.
Afficher un message, c'est compliqué; gérer l'annulation me semble un peu plus compliqué
Ca me permettra d'en apprendre plus en VB.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Affichage "Live "dans ListView

 

Sujets relatifs
Affichage des variables d'un tableaupb d'affichage de la langue arabe
Problème d'affichage des caractères accentués[HTML/CSS] Affichage version mobile
[SVN][Hooks][Tortoise] Affichage dans tortoiseAffichage control UpDown
Besoin d'aide pour une requête MySQL jointe + affichage (hiérachie)Détecter l'affichage d'une MsgBox dans une macro excel
[Ajax/JS/PHP] Gérer l'affichage d'un formulaireAffichage spécial pour mobile
Plus de sujets relatifs à : Affichage "Live "dans ListView


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR