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 - [VB.NET] Immagini pulsanti e memoria
Forum - C# / VB.NET - [VB.NET] Immagini pulsanti e memoria

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
dedalux (Normal User)
Pro


Messaggi: 155
Iscritto: 14/02/2009

Segnala al moderatore
Postato alle 23:17
Sabato, 05/09/2009
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

PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 1:02
Domenica, 06/09/2009
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 il 06/09/2009 alle 1:07
PM Quote
Avatar
dedalux (Normal User)
Pro


Messaggi: 155
Iscritto: 14/02/2009

Segnala al moderatore
Postato alle 18:24
Domenica, 06/09/2009
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
Codice sorgente - presumibilmente VB.NET

  1. Public Sub btnMEnter(ByVal btntarget As Button)
  2.         If btntarget.Enabled Then btntarget.BackgroundImage = My.Resources.Co_Evid
  3.         btntarget.ForeColor = Color.FromArgb(215, 235, 255)
  4.     End Sub



questo in ogni signolo pulsante nell'evento corrispondente

Codice sorgente - presumibilmente VB.NET

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



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

grazie

Ultima modifica effettuata da dedalux il 06/09/2009 alle 18:24
PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 19:21
Domenica, 06/09/2009
Non stai usando un immagine ma un colore, dovresti assegnare il colore alla proprietà BackColor non BackgroundImage!

Ultima modifica effettuata da manvb.net il 06/09/2009 alle 19:21
PM Quote
Avatar
dedalux (Normal User)
Pro


Messaggi: 155
Iscritto: 14/02/2009

Segnala al moderatore
Postato alle 19:42
Domenica, 06/09/2009
Mmm credo tu abbia letto male, o forse non riesco a comprendere quello che vuoi spiegarmi, potresti essere piu chiaro? :D

PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 20:49
Domenica, 06/09/2009
Codice sorgente - presumibilmente VB.NET

  1. Public Sub btnMEnter(ByVal btntarget As Button)
  2.         If btntarget.Enabled Then btntarget.[b]BackColor[/b] = My.Resources.Co_Evid
  3.         btntarget.ForeColor = Color.FromArgb(215, 235, 255)
  4.     End Sub


PM Quote
Avatar
dedalux (Normal User)
Pro


Messaggi: 155
Iscritto: 14/02/2009

Segnala al moderatore
Postato alle 22:40
Domenica, 06/09/2009
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 il 06/09/2009 alle 22:43
PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 23:12
Domenica, 06/09/2009
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.

PM Quote
Avatar
dedalux (Normal User)
Pro


Messaggi: 155
Iscritto: 14/02/2009

Segnala al moderatore
Postato alle 0:18
Lunedì, 07/09/2009
Perche praticamente ogni volta che assegno un valore nuovo a backgroundimage va a creare un nuovo spazio di memoria dove immagazzina l'immagine? quindi se faccio una variabile con ogni immagine e assegno la variabile ne creo solo 4 (mouseEnter, Leave, Down, Up) ?

come faccio x creare questa varibile con valore immagine? Non l'ho mai fatto...

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo