UserControl poco performante

mercoledì 05 gennaio 2005 - 02.46

-gio- Profilo | Newbie

Ciao a tutti,

ho un problema con uno UserControl di un WindowsForm, ed essendo nuovo nello sviluppo di applicazioni windows ho bisogno di una dritta su come muovermi:

lo user control è composto da 4 o 5 Controlli Form più un numero variabile (da 4 a 30) di Button e Panel. Ognuno di questi Panel è composto da un numero variabile (in media 20) di altri Panel. Quando clicco su un bottone questo questo UserControl fa un this.Controls.Clear() e li ricostruisce da capo.

A questo punto i miei problemi sono 2:
1 - ogni volta che clicco sul bottone lo UserControl va sempre più lento a ricaricarsi (dopo 5 o 6 volte è quasi fermo)
2 - se l'area occupata da questo UserControl esce dal form non vengono create le bande di scorrimento

Girando nei forum ho letto che per generare le bande di scorrimento si deve mettere la funzione che "disegna" il controllo dentro l'evento Paint (o fare l'override di esso).
Ho provato a seguire questo consiglio ma se carico anche solo 2 Panel (ognuno dei quali ne contiene circa altri 20) ricevo un errore "Error creating window handle".
Dopo qualche ricerca mi è sembrato di capire che è generato dal fatto che lo UserControl ha troppi controlli al suo interno; così, invece di utilizzare dei Panel (che avevano scopo puramente grafico) ho provato a disegnarli con linee e rettangoli con il PaintEventHandler, ma l'errore continua a comparire, anche se regge fino a 6 o 7 Panel, e le prestazioni, in termini di velocità a far comparire l'immagine, sono nettamente peggiorate...

Non sò che strada prendere, nel senso che provare a disegnare a mano la grafica senza Panel ha solo peggiorato le cose.

Esistono metodi più efficaci per ottenere il risultato che cerco?

Grazie

Brainkiller Profilo | Guru

Ciao,
sicuramente la progettazione di componenti Winforms o Webforms è molto delicata.
In particolare quella Winforms richiede più attenzione perchè spesso e volentieri ci si fa prendere la mano e si creano controlli su controlli su controlli che alla fine occupano la memoria.
Io quindi ti direi di controllare un po' quello che fa la tua applicazione. Magari usa il task manager e vedi l'occupazione del processo quando crei il tuo nuovo User Control.

Inoltre da quello che ho capito tu non hai creato un user control ma un container di altri controlli panel, ecc. Questo non è proprio uno user control. Di solito uno user control è atomico cioè una singola unit non scomponibile in più parti. Esempio un Button è un Button e basta non è scomponibile.
Facendo così come stai facendo vedi che ti ritrovi nei casini perchè escono le barre ma tu non le vuoi, hai un consumo di memoria elevatissimo, ecc.

Il container è comodo ma fa vita a sè. Non puoi trasformalo in Usercontrol.
Questo il mio pensiero.

ciao
david
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5