Oppure

Loading
12/07/10 21:04
foralobo
Proverò ad esporre il mio prob:

data una lista di strutture:

structure
dim bt as button
dim pb as picturebox
dim index as int32
end structure

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"

dim st as str
for i = 0 to 2
st = new str

st.index = i
st.bt = new button
st.pb = new picturebox
l.add(st)
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 12/07/10 21:05
aaa
12/07/10 21:11
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 è


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.
aaa
12/07/10 21:24
foralobo
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 è


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...
aaa
12/07/10 21:36
HeDo
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.

aaa
12/07/10 21:44
foralobo
Postato originariamente da HeDo:

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
aaa
12/07/10 21:51
HeDo
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 :)
aaa
12/07/10 21:54
foralobo
Postato originariamente da HeDo:

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à
aaa
12/07/10 22:03
HeDo
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)
aaa