Array di PictureBox

sabato 13 ottobre 2007 - 08.32

id86 Profilo | Newbie

Salve ragazzi, questo è il mio primo post sul forum!

Ho da pochissimo iniziato ad usare il framework .net e mi sono imbattuto in un problema. Devo creare un programma in c# che si basa sulla presenza di tante (poco più di un centinaio) piccole PictureBox. Ogni volta che l'utente preme su una di essa viene richiamata una funzione che algoritmicamente sceglie un'altra PictureBox che inizierà a lampeggiare.
Io pensavo fosse veramente semplice, ma quando ho cercato di far sì che le PictureBox aggiunte al mio Form fossero elementi di un array, impostando per esempio il Name pari a PictureBox[1], ho ricevuto un errore del tipo "Property value is not valid". Spulciando sulla rete ho visto che è possibile ovviare a questo problema creando i componenti usando esclusivamente il codice.. ma dato che le mie PictureBox dovranno assumere delle posizioni in base a uno sfondo che non ha regolarità geometrica e che metterò sotto, per me sarebbe veramente complicato definirne la posizione di tutte quante senza poterle visualizzare nel tab Design!
Come potrei fare?

Grazie anticipatamente!

munissor Profilo | Senior Member

le raggruppi tutte all'interno di un panel.. in modo che panel.Controls contenga solo le tue picturebox.

id86 Profilo | Newbie

Probabilmente l'ansia di essere sintetico non mi ha fatto esprimere il problema in modo chiaro!

Supponiamo io clikki sulla PictureBox numero 5: si attiverà una funzione che, in base al valore 5, mi elaborerà per esempio il numero 12. Ora voglio che la PictureBox 12 vari alcune sue proprietà (per esempio divenga invisibile).
Come posso fare l'accesso diretto alla proprietà della picturebox 12?

E' possibile farlo tramite qualche operazione particolare sui Panel, seguendo il tuo consiglio?

munissor Profilo | Senior Member

Supponendo che tutti i duoi picture box siano figli di un pannello che si chiama "panel"

aggiungi lo stesso handler di eventi a tutti i picture box

foreach(Control c in panel.Controls)
{
PictureBox pb = c as PictureBox;
if( pb != null )
pb.Click += PictureBox_Click;
}


L'handler lo implementi cosi

void PictureBox_Click(object sender, EventArgs e)
{
int index = panel.IndexOf( (PictureBox) sender );
index += 1;

// in questo modo il primo picture box darà index = 1, il secondo 2 e così via..
// .. poi qui fai quello che devi fare con index

// per accedere ad un altro picture box (es: 12)
PictureBox tmp = panel.Controls[11]; -- 0 based
}


Ovviamente il codice suppone che come figli del panel (o di qualsiasi containercontrol tu voglia) siano esclusivamente i tuoi picture box
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