Posso creare una matrice di textbox in vb.net?
Posso creare una matrice di textbox in vb.net?
Tony
da quanto ricordo le matrici in .net non ci sono (credo)
se ci dici quello che vuoi fare... magari cè quelcuno che ti aiuta...
da quanto ho capito vuoi creare dei controlli in fase di runtime...
In realtà si può, ma non in modo nativo... nel senso che in VB6, se non sbaglio, già nella finestra di progettazione si poteva dare lo stesso nome a più controlli uguali e poi dare loro un indice.Originariamente inviato da tony83
Posso creare una matrice di textbox in vb.net?
Anche in VB.NET si può, ma è un tantino più complicato. Se il tuo scopo è rendere comune qualche procedura di evento, ecco due casi possibili:
[list=1][*]Conosci già in fase di progettazione il numero di textbox della matrice, che quindi è fissato. In questo caso puoi benissimo creare le textbox di cui hai bisogno, dando loro nomi diversi (che ne so, text1, text2, text3...). A questo punto fai generare la procedura di evento che ti interessa per la prima textbox, e assegni la procedura di evento anche alle altre textbox della "matrice". Nella procedura, il parametro "sender" (dovrebbe essere il primo) indica la textbox che ha scatenato l'evento, su cui puoi lavorare.[*]Non sai a propri qual è il numero di textbox. In questo caso devi generare a runtime le diverse textbox e assegnare loro la stessa procedura di evento, secondo lo stesso principio di sopra.[/list=1]
![]()
Svegliati, Neo. Matrix ti possiede...
Non c'è una maniera piu semplice e dinamica per recuperare tutti i controlli textbox come matrice? Le matrici non esistono piu in vb.net? Quindi li posso inserire in un vettore, lista o qualcosa di simile? Sarei curioso di capire come..Originariamente inviato da newbie
In realtà si può, ma non in modo nativo... nel senso che in VB6, se non sbaglio, già nella finestra di progettazione si poteva dare lo stesso nome a più controlli uguali e poi dare loro un indice.
Anche in VB.NET si può, ma è un tantino più complicato. Se il tuo scopo è rendere comune qualche procedura di evento, ecco due casi possibili:
[list=1][*]Conosci già in fase di progettazione il numero di textbox della matrice, che quindi è fissato. In questo caso puoi benissimo creare le textbox di cui hai bisogno, dando loro nomi diversi (che ne so, text1, text2, text3...). A questo punto fai generare la procedura di evento che ti interessa per la prima textbox, e assegni la procedura di evento anche alle altre textbox della "matrice". Nella procedura, il parametro "sender" (dovrebbe essere il primo) indica la textbox che ha scatenato l'evento, su cui puoi lavorare.[*]Non sai a propri qual è il numero di textbox. In questo caso devi generare a runtime le diverse textbox e assegnare loro la stessa procedura di evento, secondo lo stesso principio di sopra.[/list=1]
![]()
Tony
Eseguire un ciclo sui controlli del Form, o del contenitore delle TextBox, e accedere alle proprietà del controllo una volta determinato che si tratta di un TextBox appartenente al gruppo di interesse?Originariamente inviato da tony83
Non c'è una maniera piu semplice e dinamica per recuperare tutti i controlli textbox come matrice? Le matrici non esistono piu in vb.net? Quindi li posso inserire in un vettore, lista o qualcosa di simile? Sarei curioso di capire come..
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
ho capito questa è l'unica maniera un for prendo tutti i controlli che mi interesso e ci lavoro... Certo peccato che hanno eliminato però le matrici come si faceva con il vecchio vb 6![]()
ciao grazie
![]()
![]()
Tony
Non è l'unica maniera. E' quella più semplice che mi sento di suggerirti proprio per la sua semplicità.Originariamente inviato da tony83
ho capito questa è l'unica maniera un for prendo tutti i controlli che mi interesso e ci lavoro... Certo peccato che hanno eliminato però le matrici come si faceva con il vecchio vb 6![]()
Ovviamente, ci sono tanti altri modi, come ad esempio la loro creazione dinamica, l'inserimento in una lista ArrayList già pronta da scandire e così via.
Per quanto riguarda le matrici di controlli, pur trattandosi di una grande semplificazione, credo se ne possa tranquillamente fare a meno.
Non ne ho mai avuto bisogno in tanti anni di Delphi, non penso che siano quindi indispensabili per la creazione di un'applicazione, tant'è che con poco codice si riesce tranquillamente a riprodurne il funzionamento a cui si aggiunge il fatto che, con un'apertura come quella fornita generalmente dai linguaggi OOP quali sono VB.NET e C#, nulla vieta di realizzare strutture anche più complesse, come vettori di controlli appartenenti a tipi differenti, quindi eterogenei, con eventi in comune che discriminano il controllo generatore, oppure la memorizzazione dei riferimenti ai controlli cui si vuole accedere in "modo indicizzato" in strutture che non siano una matrice o un vettore, ma anche Hashtable e affini.
In sostanza, credo che per il grado di libertà offerto da VB.NET, C# e tutti gli altri linguaggi OOP, si possa tranquillamente rinunciare alla matrice di controlli più che volentieri.
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Effettivamente, se i controlli sono già sul form, esisterebbe anche un altro modo... sfruttare la parola chiave "Handles", che, in pratica, indica a quale evento reagisce la procedura di evento scritta, una cosa del tipoOriginariamente inviato da tony83
ho capito questa è l'unica maniera un for prendo tutti i controlli che mi interesso e ci lavoro... Certo peccato che hanno eliminato però le matrici come si faceva con il vecchio vb 6![]()
ciao grazie
![]()
![]()
Se ad esempio vuoi che questa procedura reagisca all'evento Click delle due textbox t1 e t2, si può scriverecodice:Private Sub procedura_evento_click(ByVal sender As......) Handles casellaTesto.Click
Oppure, se le textbox sono state generate dinamicamente, puoi assegnare loro la stessa procedura di evento con un ciclo del tipo (ad esempio per il doppio clic)codice:Private Sub procedura_evento_click(ByVal sender As......) Handles t1.Click, t2.Click
codice:For Each ctrl As Control In Me.Controls If TypeOf ctrl Is TextBox Then AddHandler ctrl.DoubleClick, New EventHandler(AddressOf ProcDoppioClick) End If Next in cui ProcDoppioClick è la procedura di evento comune. Per ottenere il controllo che ha scatenato l'evento basta usare (se ad esempio è una TextBox) basta convertire il sender con CType(sender, TextBox).
Svegliati, Neo. Matrix ti possiede...