PDA

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

okay
31-10-2007, 17:46
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??

okay
31-10-2007, 19:12
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!

okay
31-10-2007, 19:18
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"

okay
01-11-2007, 08:11
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