Oppure

Loading
25/01/12 20:38
01matrix01
Ciao a tutti ragazzi, mi sono iscritto a questo sito perchè ho visto ottime realizzazioni di programmi per VB.Net 2008, linguaggio che io mastico da poco tempo, passato da VB6!!!

La mia domanda è la seguente:

Ho una routine che crea dinamicamente delle picturebox sul form con all'interno delle immagini che legge sempre nel file .ini, il problema è che non so come fare per far si che al click di una immagine mi renda visibile un Panel con lo stesso nome.

Ricapitolando, ho 2 immagini, clicco su "giardino" e lui dovrebbe rendere visibile un Panel con il nome "giardino" quindi sarebbe come scrivere giardino.visible = True.

Spero di essermi spiegato.

Grazie in anticipo a tutti
aaa
25/01/12 21:07
GN
Ogni controllo Windows Forms ha una comodissima proprietà chiamata Tag di tipo Object (che può essere quindi anche una stringa) che consente di associare dati personalizzati al controllo. Potresti quindi, nella sub che inserisce le picturebox, associare a ogni picturebox il relativo nome mettendolo nella proprietà Tag; poi associ a ogni picturebox un gestore dell'evento click in cui metterai una conversione del sender (cioè il controllo che ha scatenato l'evento) a picturebox e ne leggerai la proprietà Tag per poi scegliere il Panel di conseguenza (per esempio cercando quello con il nome giusto usando un ciclo).
Ma un esempio di codice vale più di mille parole:
Sub CostruisciPictureBox 'il metodo in cui gestisci l'inizializzazione delle picturebox
For Each i As String In immagini 'immagini deve essere la collezione di nomi delle immagini da caricare
Dim p As PictureBox 'picturebox da inserire
'qui metti il codice che hai già scritto per inizializzare la picturebox p
p.Tag = i 'associ alla picturebox il nome dell'immagine
AddHandler p, AddressOf p_click 'aggiungi un gestore dell'evento click
Next
End Sub

Private Sub p_click(ByVal sender As System.Object, ByVal e As System.EventArgs) 'qui gestisci l'evento click
Dim p As PictureBox = CType(sender, PictureBox) 'converti sender (controllo generatore dell'evento) in una picturebox, recuperando così l'oggetto p
For Each c As Control In Me.Controls 'per ogni controllo nel form
If c.GetType() = New Panel().GetType() And c.Name = p.Tag 'se è di tipo Panel e ha il nome giusto
c.Visible = True 'lo rendi visibile.
End If
Next
End Sub

Poi fammi sapere se ha funzionato!
Ultima modifica effettuata da GN 25/01/12 21:10
aaa