OUverture form ralentie par des combobox [Résolu]

Messages postés
86
Date d'inscription
jeudi 24 octobre 2013
Dernière intervention
2 avril 2014
- 24 déc. 2013 à 00:33 - Dernière réponse :
Messages postés
86
Date d'inscription
jeudi 24 octobre 2013
Dernière intervention
2 avril 2014
- 30 déc. 2013 à 00:04
Bonjour,

A l'ouverture d'une form, je charge des fichiers text dans des combobox, en appelant des procédures dans load

En VB6 aucun problème, ma form s'affichait instantanément avec toutes les cb chargées.

En VBNet il faut environ 5 secondes avant que ma form apparaissent avec les combobox chargées.

Auriez-vous une explication et une solution pour y remédier ?

merci
Afficher la suite 

Votre réponse

7 réponses

Messages postés
835
Date d'inscription
samedi 15 novembre 2008
Dernière intervention
14 janvier 2017
- Modifié par cs_Robert33 le 24/12/2013 à 06:43
0
Merci
Bonjour

Il faudrait voir le code de la fonction Load pour une tentative d'explication.
une solution consisterait à charger les ComboBox dans un thread séparé.

Bob.
C# is amazing, enjoy it!
Commenter la réponse de cs_Robert33
0
Merci
Bonjour,

La visibilité de l'objet ralenti son chargement !


Option Explicit On
Public Class Form1

Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim i As Long
ComboBox1.Visible = False
For i = 1 to ?
ComboBox1.Items.Add(ta data)
Next i
End Sub

Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
ComboBox1.Visible = True
End Sub
End Class

Cordialement, Joe.
Commenter la réponse de ehjoe
Messages postés
86
Date d'inscription
jeudi 24 octobre 2013
Dernière intervention
2 avril 2014
- 25 déc. 2013 à 16:43
0
Merci
Bonjour,

J'ai essayé :
Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
mais Me.Shown ou mybase.shown n'est pas accepté.

Voici le code :
Dans le load, j'appelle 9 procédures pour alimenter mes combobox :
loadlistbox (cb1,chemin)

puis je resize ma form

Voici le code de la procédure qui charge les combobox :
Public Sub LoadListBox(ByRef oLst As System.Windows.Forms.ComboBox, ByVal sPath As String)

On Error GoTo biii


'Dim file As System.IO.File
Dim reader As System.IO.StreamReader
Dim line As String

If Not File.Exists(sPath) Then
Exit Sub
End If

reader = File.OpenText(sPath)
'now loop through each line
While reader.Peek <> -1
line = reader.ReadLine()
oLst.Items.Add(line)

End While

'close your reader
reader.Close()
biii:
End Sub

merci
Suite,

Ce n'est pas normal que Show ne soit pas accepté.

Combien as-tu d'enregistrements et de quelle taille globale (taille fichier) ?

Car si tu as par exemple 30.000 enregistrements de 50 octets par ligne, ça va quand même prendre 1/2 seconde par combo...

Tu dis que tu appelles 9 procédures pour alimenter tes combo, ça veut dire que tu as 9 combo alimentés par 9 fichiers, ça peut faire pas mal si tes fichiers son gros... Ici aussi, peut être peux-tu mieux regrouper les datas = moins d'ouverture de fichiers ?

On t'as proposé de tout charger en même temps, si jamais tu n'y arrives pas, tu peux toujours m'envoyer le code que je vois si je peux faire quelque chose (montmartre75018 (free), si tu as vb2012, sinon MAJ.

Cordialement, Joe.
Commenter la réponse de collargol123
0
Merci
Suite,

La procédure évènementielle "Form1_Shown" ne doit pas être écrite par toi mais générée par le gestionnaire de procédures.


Public Sub LoadListBox(ByRef oLst As System.Windows.Forms.ComboBox, ByVal sPath As String)
Try
Dim reader As System.IO.StreamReader
Dim line As String
reader = File.OpenText(sPath)
While reader.Peek <> -1
oLst.Items.Add(reader.ReadLine() )
End While
reader.Close()
Catch ex As Exception
MsgBox("ERREUR : " & err.number & vblf & err.description)
End Try
End Sub

Cordialement, Joe.
Commenter la réponse de ehjoe
Messages postés
835
Date d'inscription
samedi 15 novembre 2008
Dernière intervention
14 janvier 2017
- 26 déc. 2013 à 08:24
0
Merci
Bonjour

As-tu essayé de charger les ComboBox d'un seul coup ?



Private Sub LoadListBox(oLst As ComboBox, sPath As String)

        Try
            oLst.Items.AddRange(File.ReadAllLines(sPath))
        Catch ex As Exception

        End Try

    End Sub

Commenter la réponse de cs_Robert33
Messages postés
86
Date d'inscription
jeudi 24 octobre 2013
Dernière intervention
2 avril 2014
- 30 déc. 2013 à 00:04
0
Merci
J'ai tenté ce qui est écrit ci-dessus.
J'ai fait la mise à jour vb express 2010 et cela fonctionne.
Va t'en savoir ....
Commenter la réponse de collargol123

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.