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 - [v.net] identificare un controllo
Forum - C# / VB.NET - [v.net] identificare un controllo

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


Messaggi: 146
Iscritto: 30/11/2009

Segnala al moderatore
Postato alle 23:04
Lunedì, 12/07/2010
Proverò ad esporre il mio prob:

data una lista di strutture:

Codice sorgente - presumibilmente VB.NET

  1. structure
  2. dim bt as button
  3. dim pb as picturebox
  4. dim index as int32
  5. end structure
  6.  
  7. dim l as new list (of str)



vorre poter identificare ogni singolo controllo in un gestore evento collegato a tutti i controlli.

cerco di spiegarmi meglio con un esempio:

Vogliamo creare una lista di tre "str"

Codice sorgente - presumibilmente VB.NET

  1. dim st as str
  2. for i = 0 to 2
  3. st = new str
  4.  
  5. st.index = i
  6. st.bt = new button
  7. st.pb = new picturebox
  8. l.add(st)
  9. end for



lista creata. Adesso vogliamo aggiungere ai controlli button un gestore evento. Tale gestore è comune e tutti i button.

ogni button deve far cambiare di colore la picturebox relativa allo stesso indice
cioè:
l(0).pb deve cambiare di colore quando si chicca su l(0).bt

quindi io devo gestire l'evento di "l(i).bt" perchè possa lavorare su l(i).pb.
(dove i è un qualunque indice)

Ho tralasciato il codice che permette di visualizzare i controlli in una form (tipo me.controls.add(blablabla) e di specifica dei colori perchè il tutto è un esempio.

Allora, è possibile? (beh certo che è possibile)
mi kiedevo quale ptrebbe essere un modo per farlo non considerando che vorrei evitare di mettere nome nei controlli in modo da renderli univochi..c'è qualche altro modo per recuperare l'univocità?

io avevo pensato a questo modo di lavorare:

il controllo che parte della struttura (l(0).bt per intenderci) riesce a recuperare la struttura in cui esso è stato creato. Cioè sale a livello superiore come fanno i controlli per recuperare il controllo padre ma tutto questo fatto sulla "struttura".
Una volta cosi recuperata la struttura si riesce a recuperare la variabile "index" facente parte della struttura e una volta recuperata tale variabile il gioco è fatto:
l(index).bt....e cosi via

non so se mi sono spiegato. Spero di si

Grazie tante in anticipo.

Ultima modifica effettuata da foralobo il 12/07/2010 alle 23:05
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 23:11
Lunedì, 12/07/2010

se non erro il nome in VB.NET esiste una funzione AddHandler che permette di assegnare ad un evento di un oggetto un gestore.

la sintassi è

Codice sorgente - presumibilmente C# / VB.NET

  1. AddHandler Controllo.Evento, AddressOf FunzioneGestore



nel gestore degli eventi è importante capire quale controllo ha scatenato l'evento, quindi bisogna far uso del primo parametro sender.

PM Quote
Avatar
foralobo (Normal User)
Pro


Messaggi: 146
Iscritto: 30/11/2009

Segnala al moderatore
Postato alle 23:24
Lunedì, 12/07/2010
Testo quotato

Postato originariamente da HeDo:


se non erro il nome in VB.NET esiste una funzione AddHandler che permette di assegnare ad un evento di un oggetto un gestore.

la sintassi è

Codice sorgente - presumibilmente C# / VB.NET

  1. AddHandler Controllo.Evento, AddressOf FunzioneGestore



nel gestore degli eventi è importante capire quale controllo ha scatenato l'evento, quindi bisogna far uso del primo parametro sender.




accidenti...lo sapevo che non ero stato chiaro....
grazie HeDo per la risposta..purtropp però non ha risposto al mio prob...

il prob nn è costruire l'avento. Ovviamento quello lo devo fare ma l'ho sott'inteso

il problema è identificarlo una volta passato all'evento.

ovviamente è sender...ma sender è un controllo generico che ha generato quell'evento che viene gestito. io invece vorrei salire alla struttura.
in che senso?
so che questo controllo fa parte di una struttura..ma nn ne conosco niente. Visato che fa parte di una struttura vorrei conoscere anche gli alti membri della struttura...

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 23:36
Lunedì, 12/07/2010
Testo quotato

Postato originariamente da foralobo:
so che questo controllo fa parte di una struttura..ma nn ne conosco niente. Visato che fa parte di una struttura vorrei conoscere anche gli alti membri della struttura...



ok ora ho capito :)

un'idea furba che mi viene in mente così su due piedi è metter su un dizionario di strutture che ha come chiave il controllo stesso, così puoi fare

dic(sender).campostruttura

oppure puoi, quando crei le strutture, assegnare un id univoco ai controlli e sempre attraverso un dizionario recuperare la struttura associata.


PM Quote
Avatar
foralobo (Normal User)
Pro


Messaggi: 146
Iscritto: 30/11/2009

Segnala al moderatore
Postato alle 23:44
Lunedì, 12/07/2010
Testo quotato

Postato originariamente da HeDo:

Testo quotato

Postato originariamente da foralobo:
so che questo controllo fa parte di una struttura..ma nn ne conosco niente. Visato che fa parte di una struttura vorrei conoscere anche gli alti membri della struttura...



ok ora ho capito :)

un'idea furba che mi viene in mente così su due piedi è metter su un dizionario di strutture che ha come chiave il controllo stesso, così puoi fare

dic(sender).campostruttura

oppure puoi, quando crei le strutture, assegnare un id univoco ai controlli e sempre attraverso un dizionario recuperare la struttura associata.




se io metto un identificativo ad ogni controllo non ho bisogno di dizionari...
basta fare lista(sender.tag).campostruttura
dove il tag del controllo è un identificativo...mi kiedevo se era possibile risalire alla struttura da un campo...ma sicuramente si puo fare...magare tramite reflection...

grazie cmq

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 23:51
Lunedì, 12/07/2010
Testo quotato

Postato originariamente da foralobo:
mi kiedevo se era possibile risalire alla struttura da un campo...ma sicuramente si puo fare...magare tramite reflection...



mmm no, la reflection non c'entra nulla :)

assegna un tag univoco ai controlli e usalo come indice del dizionario :)

PM Quote
Avatar
foralobo (Normal User)
Pro


Messaggi: 146
Iscritto: 30/11/2009

Segnala al moderatore
Postato alle 23:54
Lunedì, 12/07/2010
Testo quotato

Postato originariamente da HeDo:

Testo quotato

Postato originariamente da foralobo:
mi kiedevo se era possibile risalire alla struttura da un campo...ma sicuramente si puo fare...magare tramite reflection...



mmm no, la reflection non c'entra nulla :)

assegna un tag univoco ai controlli e usalo come indice del dizionario :)



quindi dici che è meglio mettere un tag univoco...meglio tag o name?
sicurmente non mi serve il dizionario..a questo punto meglio l'univocità

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 0:03
Martedì, 13/07/2010
Testo quotato

Postato originariamente da foralobo:
quindi dici che è meglio mettere un tag univoco...meglio tag o name?
sicurmente non mi serve il dizionario..a questo punto meglio l'univocità



e che ci fai con l'univocità e basta?
mica puoi fare: nomeunivococontrollo.text dall'ambiente :)
devi per forza 1) cercarlo in me.forms tipo me.forms.first(item => item.name == univoco)
2) inserirlo in un dizionario e fare dic(univoco)

PM Quote
Avatar
foralobo (Normal User)
Pro


Messaggi: 146
Iscritto: 30/11/2009

Segnala al moderatore
Postato alle 8:26
Martedì, 13/07/2010
Testo quotato

Postato originariamente da HeDo:

Testo quotato

Postato originariamente da foralobo:
quindi dici che è meglio mettere un tag univoco...meglio tag o name?
sicurmente non mi serve il dizionario..a questo punto meglio l'univocità



e che ci fai con l'univocità e basta?
mica puoi fare: nomeunivococontrollo.text dall'ambiente :)
devi per forza 1) cercarlo in me.forms tipo me.forms.first(item => item.name == univoco)
2) inserirlo in un dizionario e fare dic(univoco)



l'univocità e basta serve a raggiungere il mio scopo (già provato e va bene) piuttosto chiedo adesso: meglio avere l'univocità con TAG o NAME? o con qualche altra proprietà?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo