Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Convertire stringa in oggetto.
Forum - C# / VB.NET - Convertire stringa in oggetto.

Avatar
01matrix01 (Normal User)
Newbie


Messaggi: 1
Iscritto: 25/01/2012

Segnala al moderatore
Postato alle 21:38
Mercoledì, 25/01/2012
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

PM
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Up
1
Down
V
Segnala al moderatore
Postato alle 22:07
Mercoledì, 25/01/2012
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:
Codice sorgente - presumibilmente VB.NET

  1. Sub CostruisciPictureBox 'il metodo in cui gestisci l'inizializzazione delle picturebox
  2. For Each i As String In immagini 'immagini deve essere la collezione di nomi delle immagini da caricare
  3. Dim p As PictureBox 'picturebox da inserire
  4. 'qui metti il codice che hai già scritto per inizializzare la picturebox p
  5. p.Tag = i 'associ alla picturebox il nome dell'immagine
  6. AddHandler p, AddressOf p_click 'aggiungi un gestore dell'evento click
  7. Next
  8. End Sub
  9.  
  10. Private Sub p_click(ByVal sender As System.Object, ByVal e As System.EventArgs) 'qui gestisci l'evento click
  11. Dim p As PictureBox = CType(sender, PictureBox) 'converti sender (controllo generatore dell'evento) in una picturebox, recuperando così l'oggetto p
  12. For Each c As Control In Me.Controls 'per ogni controllo nel form
  13. If c.GetType() = New Panel().GetType() And c.Name = p.Tag 'se è di tipo Panel e ha il nome giusto
  14. c.Visible = True 'lo rendi visibile.
  15. End If
  16. Next
  17. End Sub


Poi fammi sapere se ha funzionato!

Ultima modifica effettuata da GN il 25/01/2012 alle 22:10
Grazie GN, in parte ho risolto come dici tu, ovvero nella classe picturebox ho aggiunto una uova proprietà dove vado a scrivere il nome del pannello, poi più semplicemente lo richiamo usando Me.Controls("Nome pannello).Visible = True - 01matrix01 - 26/01/12 15:11
Non c'è bisogno che tu implementi una nuova proprietà in PictureBox, apparte Tag che è Object puoi usare Name - VMikle - 26/01/12 15:42
bene - GN - 26/01/12 21:41


PM