Oppure

Loading
18/08/14 12:43
Maxton
salve a tutti, avrei bisogno di consigli per velocizzare il caricamento di una form che contiene un TableLayoutPanel che a sua volta contiene 14x32 label, si tratta di una rubrica, i dati sono salvati su un file d'accesso casuale.
Il caricamento dei label è molto semplice

 Public Sub Aggiornamento()
        Dim FileNum = FreeFile()
        Dim Rubrica As ClasseRubrica = New ClasseRubrica 

       
            FileOpen(FileNum, MenùIniziale.DiscoDati + Costante.NomeFileRubrica , OpenMode.Random, , OpenShare.Shared, Costante.GrandezzaCampoRubrica)

        LunghezzaMassima = LOF(FileNum) / Costante.GrandezzaCampoRubrica


        For Idx = 1 To 32
            If Indice + Idx > LunghezzaMassima Then

                Me.Controls.Find("LabelNumero" & Idx.ToString, True)(0).Text = ""
                Me.Controls.Find("LabelNome" & Idx.ToString, True)(0).Text = ""
                Me.Controls.Find("LabelCOgnome" & Idx.ToString, True)(0).Text = ""
                Me.Controls.Find("LabelIndirizzo" & Idx.ToString, True)(0).Text = ""
                Me.Controls.Find("LabelTelefono1" & Idx.ToString, True)(0).Text = ""
                Me.Controls.Find("LabelTelefono2" & Idx.ToString, True)(0).Text = ""
                Me.Controls.Find("LabelTelefono3" & Idx.ToString, True)(0).Text = ""
                Me.Controls.Find("LabeFax" & Idx.ToString, True)(0).Text = ""

            Else

                FileGet(FileNum, Rubrica.Cliente, Indice + Idx)

                Me.Controls.Find("LabelNumero" & Idx.ToString, True)(0).Text = (Indice + Idx).ToString
                Me.Controls.Find("LabelNome" & Idx.ToString, True)(0).Text = Trim(Appuntamenti.Cliente.Nome)
                Me.Controls.Find("LabelCognome" & Idx.ToString, True)(0).Text = Trim(Rubrica.Cliente.Cognome)
                Me.Controls.Find("LabelIndirizzo" & Idx.ToString, True)(0).Text = Trim(Rubrica.Cliente.Indirizzo)
                Me.Controls.Find("LabelTelefono1" & Idx.ToString, True)(0).Text = Trim(Rubrica.Cliente.Telefono1)
                Me.Controls.Find("LabelTelefono2" & Idx.ToString, True)(0).Text = Trim(Rubrica.Cliente.Telefono2)
                Me.Controls.Find("LabelTelefono3" & Idx.ToString, True)(0).Text = Trim(Rubrica.Cliente.Telefono3)
                Me.Controls.Find("LabelFax" & Idx.ToString, True)(0).Text = Trim(Rubrica.Cliente.Fax)

            End If
        Next

        FileClose()
    End Sub


Vi ho postato una parte del codice ma i label sono 32 per ogni riga (14 in totale), indice è una variabile che si incrementa di 32 o decerementa di 32 quando vado avanti o indietro (con i dovuto controlli), funziona tutto perfettamente ma impiega più di 5 secondi ad aggiornarsi la schermata, c'è modo per velocizzare il tutto?
aaa
18/08/14 13:37
sspintux
Postato originariamente da Maxton:

salve a tutti,
...
c'è modo per velocizzare il tutto?

Ciao,
usa un controllo adatto alla visualizzazione di elenchi , ... tipo listview o datagridview

HTH
Ultima modifica effettuata da sspintux 18/08/14 13:38
aaa
12/09/14 12:53
vankraster
Secondo me o usi una gridview oppure ti fai un user control con le label di una riga e fai solo un findControl, con poi associazione di valori tramite una funzione.
Il problema è troppi findocontrol, e poi usa searchAllChildren = false cioè
Me.Controls.Find("LabelTelefono3" & Idx.ToString, False)(0)
oppure metti tutti i controlli sotto un Panel e poi fai Panel.Controls.Find.... , devi ottimizzare il codice..
aaa
15/09/14 9:59
Maxton
Postato originariamente da sspintux:

Postato originariamente da Maxton:

salve a tutti,
...
c'è modo per velocizzare il tutto?

Ciao,
usa un controllo adatto alla visualizzazione di elenchi , ... tipo listview o datagridview

HTH


Il problema è che a me servono i label, vankraster non ho molto capito la tua soluzione
aaa
17/09/14 13:37
vankraster
Codice C#.
Analizzando il codice ho visto anche la funzione FileGet, Microsoft dice su questa funzione:
"The My feature gives you better productivity and performance in file I/O operations than FileGet. For more information, see My.Computer.FileSystem Object" guarda qui: msdn.microsoft.com/en-us/library/…(v=vs.90).aspx

Riguardo all'UserControl (UC) ti dicevo di crearti uno con le 8 Label: Nome, Cognome, Numero.... e poi crearti una funzione
public void AssegnaDati(Rubrica.Cliente cli){
LabelNome.Text = cli.Nome;
LabelCognome.Text = cli.Cognome;
.....
}


poi la replichi per n volte nel tuo progetto e nella sub Aggiornamento fai:
TableLayoutPanel.Controls.Find("UC"+Idx.ToString(), false)(0).AssegnaDati(Rubrica.Cliente);
aaa