Salve a tutti,
ho un problema (forse dovuto a un approccio non corretto...) in un'applicazione che sto realizzando. Ho necessita' di creare molti controlli a run-time, praticamente dovrebbe essere visualizzata una specie di mini foglio Excel con caselle non editabili ma che rispondano a eventi legati al mouse; ho pensato di usare dei controlli panel. Il codice che uso e' il seguente (ogni panel creato e' gestito dalla variabile panelDettaglio e alla fine e' aggiunto a un panel chiamato panelContenitore):
For k = 0 To numeroRighe - 1
x = 0
For j = 0 To numeroColonne - 1
panelDettaglio = New Panel
With panelDettaglio
.Name = "PanelDettaglio" & j & "_" & k
.Size = New Size(larghezza, altezza)
.Left = x
.Top = y
.BorderStyle = BorderStyle.FixedSingle
End With
AddHandler panelDettaglio.MouseEnter, AddressOf SuPanelDettaglioCalendarioMouseEnter
AddHandler panelDettaglio.MouseLeave, AddressOf SuPanelDettaglioCalendarioMouseLeave
AddHandler panelDettaglio.MouseDown, AddressOf SuPanelDettaglioCalendario_MouseDown
AddHandler panelDettaglio.MouseUp, AddressOf SuPanelDettaglioCalendario_MouseUp
AddHandler panelDettaglio.MouseMove, AddressOf SuPanelDettaglioCalendario_MouseMove
x += larghezza
PanelContenitore.Controls.Add(panelDettaglio)
Next
y += altezza
Next
In base a comandi dell'utente, questa griglia viene ricreata; prima di farlo uso il comando
PanelContenitore.Controls.Clear
Funziona tutto abbastanza bene, anche con griglie di migliaia di panel; tuttavia a volte il programma va in crash e viene fuori l'errore "Errore durante la creazione dell'handle della finestra". E' come se la memoria andasse in saturazione perche' i panel cancellati dal comando Clear occupano ancora risorse.
Ribadisco, probabilmente l'approccio e' sbagliato e forse occorrebbe gestire meglio la memoria (ringrazio chi vorra' darmi indicazioni in merito), ma e' pur vero che il problema non viene fuori subito, per cui se riuscissi a liberare risorse probabilmente il mio codice basterebbe (sopportando la lentezza in fase di creazione dei panel, che comunque non e' eccessiva).
Grazie.