Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Velocizzare Caricamento Label [VB.NET]
Forum - C# / VB.NET - Velocizzare Caricamento Label [VB.NET]

Avatar
Maxton (Normal User)
Newbie


Messaggi: 14
Iscritto: 30/07/2014

Segnala al moderatore
Postato alle 14:43
Lunedì, 18/08/2014
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

Codice sorgente - presumibilmente VB.NET

  1. Public Sub Aggiornamento()
  2.         Dim FileNum = FreeFile()
  3.         Dim Rubrica As ClasseRubrica = New ClasseRubrica
  4.  
  5.        
  6.             FileOpen(FileNum, MenùIniziale.DiscoDati + Costante.NomeFileRubrica , OpenMode.Random, , OpenShare.Shared, Costante.GrandezzaCampoRubrica)
  7.  
  8.         LunghezzaMassima = LOF(FileNum) / Costante.GrandezzaCampoRubrica
  9.  
  10.  
  11.         For Idx = 1 To 32
  12.             If Indice + Idx > LunghezzaMassima Then
  13.  
  14.                 Me.Controls.Find("LabelNumero" & Idx.ToString, True)(0).Text = ""
  15.                 Me.Controls.Find("LabelNome" & Idx.ToString, True)(0).Text = ""
  16.                 Me.Controls.Find("LabelCOgnome" & Idx.ToString, True)(0).Text = ""
  17.                 Me.Controls.Find("LabelIndirizzo" & Idx.ToString, True)(0).Text = ""
  18.                 Me.Controls.Find("LabelTelefono1" & Idx.ToString, True)(0).Text = ""
  19.                 Me.Controls.Find("LabelTelefono2" & Idx.ToString, True)(0).Text = ""
  20.                 Me.Controls.Find("LabelTelefono3" & Idx.ToString, True)(0).Text = ""
  21.                 Me.Controls.Find("LabeFax" & Idx.ToString, True)(0).Text = ""
  22.  
  23.             Else
  24.  
  25.                 FileGet(FileNum, Rubrica.Cliente, Indice + Idx)
  26.  
  27.                 Me.Controls.Find("LabelNumero" & Idx.ToString, True)(0).Text = (Indice + Idx).ToString
  28.                 Me.Controls.Find("LabelNome" & Idx.ToString, True)(0).Text = Trim(Appuntamenti.Cliente.Nome)
  29.                 Me.Controls.Find("LabelCognome" & Idx.ToString, True)(0).Text = Trim(Rubrica.Cliente.Cognome)
  30.                 Me.Controls.Find("LabelIndirizzo" & Idx.ToString, True)(0).Text = Trim(Rubrica.Cliente.Indirizzo)
  31.                 Me.Controls.Find("LabelTelefono1" & Idx.ToString, True)(0).Text = Trim(Rubrica.Cliente.Telefono1)
  32.                 Me.Controls.Find("LabelTelefono2" & Idx.ToString, True)(0).Text = Trim(Rubrica.Cliente.Telefono2)
  33.                 Me.Controls.Find("LabelTelefono3" & Idx.ToString, True)(0).Text = Trim(Rubrica.Cliente.Telefono3)
  34.                 Me.Controls.Find("LabelFax" & Idx.ToString, True)(0).Text = Trim(Rubrica.Cliente.Fax)
  35.  
  36.             End If
  37.         Next
  38.  
  39.         FileClose()
  40.     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?

PM Quote
Avatar
sspintux (Normal User)
Newbie


Messaggi: 8
Iscritto: 22/07/2009

Segnala al moderatore
Postato alle 15:37
Lunedì, 18/08/2014
Testo quotato

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 il 18/08/2014 alle 15:38
PM Quote
Avatar
vankraster (Member)
Rookie


Messaggi: 32
Iscritto: 05/11/2010

Segnala al moderatore
Postato alle 14:53
Venerdì, 12/09/2014
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..

PM Quote
Avatar
Maxton (Normal User)
Newbie


Messaggi: 14
Iscritto: 30/07/2014

Segnala al moderatore
Postato alle 11:59
Lunedì, 15/09/2014
Testo quotato

Postato originariamente da sspintux:

Testo quotato

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

PM Quote
Avatar
vankraster (Member)
Rookie


Messaggi: 32
Iscritto: 05/11/2010

Segnala al moderatore
Postato alle 15:37
Mercoledì, 17/09/2014
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: http://msdn.microsoft.com/en-us/library/0b485hf7(v=vs.90). ...

Riguardo all'UserControl (UC) ti dicevo di crearti uno con le  8 Label: Nome, Cognome, Numero.... e poi crearti una funzione
Codice sorgente - presumibilmente C# / VB.NET

  1. public void AssegnaDati(Rubrica.Cliente cli){
  2. LabelNome.Text = cli.Nome;
  3. LabelCognome.Text = cli.Cognome;
  4. .....
  5. }



poi la replichi per n volte nel tuo progetto e nella sub Aggiornamento fai:
Codice sorgente - presumibilmente Plain Text

  1. TableLayoutPanel.Controls.Find("UC"+Idx.ToString(), false)(0).AssegnaDati(Rubrica.Cliente);


PM Quote