View Full Version : [Visual Basic] Codice alternativo
Dreamer4135
31-10-2007, 17:33
Dovrei creare un programma con 100 bottoni diversi che incrementano un numero in ognuna delle 100 text box
Private Sub Bu1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bu1.Click
a(1) = a(1) + 1
Box1.Text = a(1)
End Sub
Private Sub Bu2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bu2.Click
a(2) = a(2) + 1
Box2.Text = a(2)
End Sub
Private Sub Bu3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bu3.Click
a(3) = a(3) + 1
Box3.Text = a(3)
End Sub
Private Sub Bu4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bu4.Click
a(4) = a(4) + 1
Box4.Text = a(4)
End Sub
Private Sub Bu5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bu5.Click
a(5) = a(5) + 1
Box5.Text = a(5)
End Sub
"bu" sta per button e "box" per textbox, ma ne dovrei crearne 100, c'è un modo per evitare il tutto?? mi sareste molto, molto d'aiuto
Dovrei creare un programma con 100 bottoni diversi che incrementano un numero in ognuna delle 100 text box
"bu" sta per button e "box" per textbox, ma ne dovrei crearne 100, c'è un modo per evitare il tutto?? mi sareste molto, molto d'aiuto
1. metti un pulsante sul form che si chiamerà text1.text
2. premi tasto destro del mouse sulla textbox e seleziona "copia"
3. premi di nuovo tasto destro del mouse e seleziona per incolla
ti verrà richiesto che il controllo già esiste vuoi creare una matrice di controlli?
a questo punto premi "SI"
il controllo ora si chiamerà text1(0).text
ora fai i 3 step sopra e arriva a incollare 100 textbox in cui ognuna ha il suo indice
esempiio:
avrai text1(0).text
text1(1).text
... fino a
text1(100).text
e così hai risolto!!
ciao
Edit:
puoi usare i 100 textbox in un ciclo for tipo:
for i=0 to 100
text1(i).text="ciao da okay"
next i
e tanto altre cose
Dreamer4135
31-10-2007, 17:52
grazie mille, provo subito, credo che tu mi abbia appena risparmiato ore di copia, incolla e modifica :D :D :D :D
Grazie a tutti quelli del forum in generale, senza di voi starei messo male :p :p :p
Dreamer4135
31-10-2007, 18:02
piccolo problema, mi sono dimenticato di dire che uso visual basic 2005 (non mi da questa matrice di controlli)
altre soluzioni??
piccolo problema, mi sono dimenticato di dire che uso visual basic 2005 (non mi da questa matrice di controlli)
altre soluzioni??
usi vb net?
come no, non stò in postazione, ma la tecnica è simile
metti una textbox sul form e poi crei una matrice del controllo
Dreamer4135
31-10-2007, 19:15
se faccio copia e incolla non mi dice niente!
se faccio copia e incolla non mi dice niente!
senti non sto in postazione + tardi molto + tardi ti posto come fare.
da quello che scrivi non capisco se hai eseguito i 3 step sopra.
per vb net dovrebbe essere simile
Edit: Quando il controllo textbox stà sul form il pulsante deve avere il focos ovvero devi cliccarci sopra dandogli il focus. poi clicchil tasto destro del mouse e ti si apre un popup dove scegli "copia" poi ancora tasto destro e scegli incolla.
oppure, sempre con il focus sul pulsante premi contemporaneamente "ctrl+c" e poi "ctrl+v"
Allora ho provato e in vb NET non esiste un controllo dove puoi creare una matrice come in vb6!!!!!
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 tipo
codice:Private Sub procedura_evento_click(ByVal sender As......) Handles casellaTesto.Click
Se ad esempio vuoi che questa procedura reagisca all'evento Click delle due textbox t1 e t2, si può scrivere
codice:Private Sub procedura_evento_click(ByVal sender As......) Handles t1.Click, t2.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: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).
In definitiva come in vb6 non si può + fare.
altra alternativa:
supponi di avere 5 Labels e un button nella tua finestra, un modo per gestire una matrice di controlli può essere questo:
Dim MioControllo As Control
For Each MioControllo In Controls
If MioControllo.TabIndex = 3 Then
MioControllo.Text = "Topolino"
Else
MioControllo.Text = "Pippo"
End If
Next
Nel codice si definisce la variabile MioControllo come appartenente all'insieme Control, e attraverso un ciclo For Each...Next scorri l'elenco di tutti i controlli appartenenti al tuo form. Sottolineo TUTTI, anche eventuali Button, TextBox o quant'altro sia presente nella finestra e che sia un controllo.
Puoi modificare alcuni dei controlli presenti facendo riferimento alla proprietà TabIndex
Se le Labels hanno indice da 0 a 4 e il button ha indice 5, dopo il ciclo, la proprietà text di ogni controllo sarà "Pippo" tranne che per la label di indice 3 che avrà la suddetta proprietà impostata a "Topolino"
ciao
Dreamer4135
01-11-2007, 09:49
grazie, provo subito a fare come hai detto
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.