Oppure

Loading
05/09/09 21:17
dedalux
Sera a tutti e buon fine settimana.
Dunue volevo chiedervi un'informazione e un aiuto
in un programma ho personalizzato dei controlli button abbinandoci un'immagine che cambia in base alla posizione del mouse (enter, leave, down, up) pero, tenendo aperto il taskmanager mi sono accorto che la memoria occupata dal programma aumenta facendo cambiare l'immagine ai pulsanti, ossia se passo sopra ad un pulsante col mouse che l'immagine diventa tipo piu chiara l'applicazione viene ad occupare 200kb in piu e questo ogni volta.
Mi chiedevo se la cosa è normale, se ho sbagliato qualcosa..

Come soluzione avevo pensato a creare una dll in cui inserire le immagini e richiamarle solo quando servono... In teoria, x quel poco che ne so di assemblies, il problema doverbbe risolversi, ma non saprei come inserircele. Sapreste consigliarmi come e/o consigliarmi un'articolo dove documentarmi sulle dll?

Grazie mille siete mitici!:D
aaa
05/09/09 23:02
manvb.net
Con che codice cambi le immagini dei buttons? Da dove prendi le immagini? Come le carichi? Il fatto che aumenti ogni volta la memoria non è normale, evidentemente crei ogni volta una nuova istanza scartando quelle vecchie(che vanno ad occupare memoria), comunque non ti preoccupare, la memoria non cresce più di tanto, se ne occupa il Garbage Collector! Comunque dovresti postare un po di codice per capire meglio il problema!




Ps. Lascia perdere le dll che in questo caso non c'entrano un tubo(l'immagine o la carichi da file o da risorsa(che è sempre un file) sempre un immagine è!)
Ultima modifica effettuata da manvb.net 05/09/09 23:07
aaa
06/09/09 16:24
dedalux
Ok gia smentita la mia teoria dll (premesso che non ne sapevo un tubo :rofl:)
posto il codice che è una stupidaggine, da li si capisce tutto

questo in un modulo insieme agli altri casi, MouseDown, MouseUP, MouseLeave
Public Sub btnMEnter(ByVal btntarget As Button)
        If btntarget.Enabled Then btntarget.BackgroundImage = My.Resources.Co_Evid
        btntarget.ForeColor = Color.FromArgb(215, 235, 255)
    End Sub


questo in ogni signolo pulsante nell'evento corrispondente

Private Sub btnLista_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLista.MouseEnter
        btnMEnter(btnLista)
    End Sub


se ci sono accorgimenti o critiche vi sarei grato di segnalarli..

grazie
Ultima modifica effettuata da dedalux 06/09/09 16:24
aaa
06/09/09 17:21
manvb.net
Non stai usando un immagine ma un colore, dovresti assegnare il colore alla proprietà BackColor non BackgroundImage!
Ultima modifica effettuata da manvb.net 06/09/09 17:21
aaa
06/09/09 17:42
dedalux
Mmm credo tu abbia letto male, o forse non riesco a comprendere quello che vuoi spiegarmi, potresti essere piu chiaro? :D
aaa
06/09/09 18:49
manvb.net
 Public Sub btnMEnter(ByVal btntarget As Button)
        If btntarget.Enabled Then btntarget.[b]BackColor[/b] = My.Resources.Co_Evid
        btntarget.ForeColor = Color.FromArgb(215, 235, 255)
    End Sub
aaa
06/09/09 20:40
dedalux
O.o ma io è proprio l'immagine del pulsante che cambio

Edit: quel Co_Evid è l'immagine del pulsante con un riflesso disegnato, Co_Evid.png
8-| non sono cosi imbranato 8-|
Ultima modifica effettuata da dedalux 06/09/09 20:43
aaa
06/09/09 21:12
manvb.net
Ops, scusa, avevi ragione prima ho letto male il sorgente(avevo capito che co_evid fosse un colore)!
Comunque, per evitare l'aumento di ram potresti creare una variabile globale di tipo Image e all'avvio del programma assegnargli la risorsa. Poi ti basterebbe assegnare alla backgroundimage la variabile globale(sarebbe un asseganmento di references, quindi senza creazione di istanza) invece che la risorsa.
aaa