OUverture form ralentie par des combobox [Résolu]

collargol123 86 Messages postés jeudi 24 octobre 2013Date d'inscription 2 avril 2014 Dernière intervention - 24 déc. 2013 à 00:33 - Dernière réponse : collargol123 86 Messages postés jeudi 24 octobre 2013Date d'inscription 2 avril 2014 Dernière intervention
- 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

cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 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
collargol123 86 Messages postés jeudi 24 octobre 2013Date d'inscription 2 avril 2014 Dernière intervention - 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
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 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
collargol123 86 Messages postés jeudi 24 octobre 2013Date d'inscription 2 avril 2014 Dernière intervention - 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.