View Full Version : [C#] PictureBox: cambio immagine
Salve,
scusate se disturbo la vostra attenzione ma non ho trovato nulla che potesse essermi d'aiuto e sono strato costretto a chiamarvi in causa!
E' da poco che mi sono addentrato nel mondo della programmazione e sto cercando di creare un semplice programmino che gestisce un lancio di dadi. Il problema che mi si presenta ha a che fare con la PictureBox: quando il programma viene avviato ha già al suo interno una prima figura ma mi servirebbe che cambi in base al numero estratto a random dal dado (esempio: il random mi procura il numero '2' --> la PictureBox dovrebbe mostrare l'immagine 'd2.jpg' presente in C:\\d2.jpg e non più l'immagine base (quest'ultima inserita nel MainFormLoad con i comandi
string indirizzo;
indirizzo = "C:\\dado.jpg";
pctImage.LoadAsync(indirizzo);
Dato che ci sono vorrei porvi un'ulteriore domanda: in quale directory del progetto devo inserire le immagini che utilizzo in esso senza fare in modo che un presunto secondo utente si ritrovi il disco C:\\ pieno zeppo di immagini?!?
Mi rendo conto che sia una banalità per voi esperti, ma io, purtroppo, devo farne di strada ancora...!
Vi ringrazio per l'attenzione ed attendo fiducioso una vostra risposta!
Fenomeno85
13-09-2008, 10:45
Te l'ho fatto così puoi incominciare a vedere un pò come usare i vari attributi. Comunque su VC# ti consiglio di prendere un libro o leggerere tanto :)
http://fenomeno85.altervista.org/dadi.7z
se hai dubbi chiedi pure
~§~ Sempre E Solo Lei ~§~
avastreg
13-09-2008, 11:01
Salve,
scusate se disturbo la vostra attenzione ma non ho trovato nulla che potesse essermi d'aiuto e sono strato costretto a chiamarvi in causa!
E' da poco che mi sono addentrato nel mondo della programmazione e sto cercando di creare un semplice programmino che gestisce un lancio di dadi. Il problema che mi si presenta ha a che fare con la PictureBox: quando il programma viene avviato ha già al suo interno una prima figura ma mi servirebbe che cambi in base al numero estratto a random dal dado (esempio: il random mi procura il numero '2' --> la PictureBox dovrebbe mostrare l'immagine 'd2.jpg' presente in C:\\d2.jpg e non più l'immagine base (quest'ultima inserita nel MainFormLoad con i comandi
string indirizzo;
indirizzo = "C:\\dado.jpg";
pctImage.LoadAsync(indirizzo);
Dato che ci sono vorrei porvi un'ulteriore domanda: in quale directory del progetto devo inserire le immagini che utilizzo in esso senza fare in modo che un presunto secondo utente si ritrovi il disco C:\\ pieno zeppo di immagini?!?
Mi rendo conto che sia una banalità per voi esperti, ma io, purtroppo, devo farne di strada ancora...!
Vi ringrazio per l'attenzione ed attendo fiducioso una vostra risposta!
oppure fai cosi per l'immagine
al verificarsi dell'evento, fai
Bitmap b = new Bitmap(...); //ti carichi il file, non ricordo la procedura precisa
pctImage.Image = b; //assegni l'immagine
poi tiri un refresh se proprio non va ma dovrebbe andare
Per i file, ci sono due modi:
- metti la cartella all'interno del progetto, in modo che con i percorsi relativi (tipo ../img/d2.jpg) riesci ad accedervi
- fai il deployment della tua applicazione, e metti la roba in documenti oppure in una cartella a tua scelta e scrivi il percorso nel registro (è più difficile questa via)
Fenomeno85
13-09-2008, 11:06
oppure fai cosi per l'immagine
al verificarsi dell'evento, fai
Bitmap b = new Bitmap(...); //ti carichi il file, non ricordo la procedura precisa
pctImage.Image = b; //assegni l'immagine
poi tiri un refresh se proprio non va ma dovrebbe andare
Per i file, ci sono due modi:
- metti la cartella all'interno del progetto, in modo che con i percorsi relativi (tipo ../img/d2.jpg) riesci ad accedervi
- fai il deployment della tua applicazione, e metti la roba in documenti oppure in una cartella a tua scelta e scrivi il percorso nel registro (è più difficile questa via)
scusa è ma perchè non usare i resources?!?!.. soluzione più semplice e senza neache sbattersi. E' la soluzione che ho adottato anche nel progetto che gli ho fatto.
picBoxFacciaDado.Image = dadi.Properties.Resources.cinque;
~§~ Sempre E Solo Lei ~§~
avastreg
13-09-2008, 14:54
scusa è ma perchè non usare i resources?!?!.. soluzione più semplice e senza neache sbattersi. E' la soluzione che ho adottato anche nel progetto che gli ho fatto.
picBoxFacciaDado.Image = dadi.Properties.Resources.cinque;
~§~ Sempre E Solo Lei ~§~
si anche, non mi era venuto in mente al momento
scusa è ma perchè non usare i resources?!?!.. soluzione più semplice e senza neache sbattersi. E' la soluzione che ho adottato anche nel progetto che gli ho fatto.
picBoxFacciaDado.Image = dadi.Properties.Resources.cinque;
~§~ Sempre E Solo Lei ~§~
Grazie infinite ad entrambi per gli ottimi consigli e per il programma che ha creato Fenomeno85 :kiss:
I Resources, però, non li ho mai utilizzati ed infatti non riesco a capire come funzionino! Ho confrontato i vari file .cs del tuo programma con i miei ed ho cercato di renderli quasi identici ma sembra non essere bastato, mi esce questo errore:
The typer or namespace name 'Properties' does not exist in the namespace 'LancioDadi' (are you missing an assembly refence?) (CS0234)
Ho provato anche ad usare questo codice:
Image img = Image.FromFile("C:\\d1.gif");
PictureBox1.Image = img;
ma in questo caso l'errore riscontrato è:
Cannot implicitly convert type 'string' to 'System.Drawing.Image' (CS0029)
I don't know...! :help:
avastreg
13-09-2008, 19:17
riguardo al secondo problema prova a fare cosi:
PictureBox1.Image = Image.FromFile("C:\\d1.gif");
ora non ho sottomano il mio pc quindi non posso far prove o controllare vecchi programmi, ma dovrebbe funzionare
Image img = Image.FromFile("C:\\d1.gif");
PictureBox1.Image = img;
questo non funziona perchè cerchi di istanziare un oggetto Image, ma Image è una classe astratta http://msdn.microsoft.com/en-us/library/system.drawing.image.aspx
Dovrebbe funzionare con Bitmap che non è classe astratta e deriva da Image:
Bitmap img = new Bitmap("C:\\d1.gif");
PictureBox1.Image = img;
||ElChE||88
13-09-2008, 20:03
questo non funziona perchè cerchi di istanziare un oggetto Image, ma Image è una classe astratta http://msdn.microsoft.com/en-us/library/system.drawing.image.aspx
Ehm, a me quel codice (con Image) funziona benissimo (VS2008).
Ho corretto qualche errorino ed ora l'immagine appare :yeah: ...peccato che se ripremo nuovamente il bottone 'Lancia' rimane tutto invariato (anche nel caso che il numero estratto sia diverso :cry: )
Fenomeno85
15-09-2008, 08:10
Grazie infinite ad entrambi per gli ottimi consigli e per il programma che ha creato Fenomeno85 :kiss:
I Resources, però, non li ho mai utilizzati ed infatti non riesco a capire come funzionino! Ho confrontato i vari file .cs del tuo programma con i miei ed ho cercato di renderli quasi identici ma sembra non essere bastato, mi esce questo errore:
The typer or namespace name 'Properties' does not exist in the namespace 'LancioDadi' (are you missing an assembly refence?) (CS0234)
Ho provato anche ad usare questo codice:
Image img = Image.FromFile("C:\\d1.gif");
PictureBox1.Image = img;
ma in questo caso l'errore riscontrato è:
Cannot implicitly convert type 'string' to 'System.Drawing.Image' (CS0029)
I don't know...! :help:
allora partiamo con ordine.
hai importato prima di tutto le immagini?
Hai visto la struttura del mio progetto?
resources altro non è che un file xml e quindi ci accedi come
LancioDati.Properties.Resources.nome
~§~ Sempre E Solo Lei ~§~
Fenomeno85
15-09-2008, 08:14
Aggiungo:
http://msdn.microsoft.com/en-us/library/7k989cfy(VS.80).aspx
questo è un articolo su come si usano i resources.
NB: non so quanta esperienza hai ma msdn ha la soluzione al 99% dei problemi in casa VS.
~§~ Sempre E Solo Lei ~§~
avastreg
15-09-2008, 10:36
Ho corretto qualche errorino ed ora l'immagine appare :yeah: ...peccato che se ripremo nuovamente il bottone 'Lancia' rimane tutto invariato (anche nel caso che il numero estratto sia diverso :cry: )
posta il pezzo di codice riguardante quella parte, molto probabilmente non si aggiorna la pictureBox (anche se credo dovrebbe)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.