Francesco53 ha scritto:
Un saluto ed un ringraziamento per i vostri consigli che ho utilizzato per la risoluzione della mia difficoltà.
Posto il codice con la variazione in base alle vostre indicazioni:
Sub Evidenzia()
Dim ds As Byte = TextBox1.Text
For ii As Long = 0 To DataGridView4.Rows.Count() - 1
For t = 0 To 5
Dim sColore As String = DataGridView4.Rows(ii).Cells(t).Style.BackColor.Name
If DataGridView4.Rows(ii).Cells(t).Value = ds Then
DataGridView4.Rows(ii).Cells(t).Style.BackColor = Color.Cyan
End If
If DataGridView4.Rows(ii).Cells(t).Value = ds And DataGridView4.Rows(ii).Cells(t).Style.BackColor.Name = sColore Then
DataGridView4.Rows(ii).Cells(t).Style.BackColor = Color.Green
End If
Next t
Next ii
End Sub
Francesco
Si può ottimizzare.
Estrai inutilmente il colore di fondo di tutte le celle.
Se il valore è
ds, tu metti a ciano, poi ricontrolli inutilmente ds e giustamente BackColor, se sColore non era ciano lasci ciano.
se lo sfondo della cella è già ciano e il valore è
ds, tu metti inutilmente a ciano, poi ricontrolli inutilmente ds e giustamente BackColor, e visto che sColore era ciano, metti lo sfondo a verde.
se lo sfondo della cella è verde, torna a ciano... non è sbagliato?
Sub Evidenzia()
Dim ds As Byte = TextBox1.Text
For ii As Long = 0 To DataGridView4.Rows.Count() - 1
For t = 0 To 5
If DataGridView4.Rows(ii).Cells(t).Value = ds Then
Select Case DataGridView4.Rows(ii).Cells(t).Style.BackColor.Name
Case "0" ' colore di default, se lo hai cambiato in White metti "White"
DataGridView4.Rows(ii).Cells(t).Style.BackColor = Color.Cyan
Case "Cyan"
DataGridView4.Rows(ii).Cells(t).Style.BackColor = Color.Green
End Select
End If
Next t
Next ii
End Sub
In questo modo controlli il valore
ds una sola volta per cella e solo quando corrisponde controlli anche il colore una sola volta e se è quello di default "0" [ARGB(0,0,0,0) = nero max trasparenza], lo cambi in ciano una sola volta, se è ciano lo cambi in verde.
Se la cella è verde resta verde.
Se le celle sono poche, la differenza di velocità non si vedrà, ma se le celle sono molte la differenza si vedrà.
Se le celle sono moltissime, rileggi il post di Alka
Alka ha scritto:
Io non farei affidamento sul colore già assegnato alla cella, ma implementerei una logica tale per cui, avendo a disposizione gli oggetti o i record su cui lavorare, si determina per ciascuno di essi il colore *finale* e *definitivo*, ovvero quello giusto tutto considerato, e andrei poi di conseguenza a prelevare dalla struttura dati dei colori quello corretto, cella per cella, quando è necessario inizializzarla o disegnarla.
Ciao! :bye:
perché leggere e scrivere i valori sui controlli grafici è lento, inoltre inizializzare le celle tutte dello stesso colore per poi riscrivere i colori, allunga il processo.