PDA

View Full Version : [VB.NET]Indicizzare label o textbox


Fabio7586
14-11-2009, 16:04
Ciao, sempre nell'ambito di un calendario di calcio, ho deciso di far si che per ogni incontro si possano far scegliere al massimo 11 giocatori che è possibile selezionare da un datagridview. La problematica sta nel fatto che appena fatta una multiselect di 11 righe, vorrei provare a far scrivere all'interno di 11 label i nomi dei giocatori scelti. Avevo pensato di indicizzare le label con questo codice

For i = 1 To 11
Dim c = "Label" & i
Dim t As Label = DirectCast(Me.FindControl(c), Label)
If Not (t Is Nothing) Then
t.Text = "Label " & t.UniqueID
End If
Next
End Sub


ma quando scrivo me.findcontrol, mi segnala errore. Va premesso che è codice vb6 (o almeno credo).

Esiste un altro modo per indicizzare label, texbox e etc...?

MarcoGG
14-11-2009, 20:34
Mi sembra codice molto contorto per quel che ( a quanto ho capito ) dovrebbe fare. Ma queste 11 Label sono già presenti sulla Form o le vuoi creare dinamicamente ? In che senso le vuoi "indicizzare" ?

Fabio7586
14-11-2009, 22:25
Mi sembra codice molto contorto per quel che ( a quanto ho capito ) dovrebbe fare. Ma queste 11 Label sono già presenti sulla Form o le vuoi creare dinamicamente ? In che senso le vuoi "indicizzare" ?
no le 11 label sono statiche nel senso che per ogni partita al minimo e al massimo sono 11 giocatori ;). le vorrei indicizzare (posizionando un indice che mi permetta di scorrerle) così da poterle mettere in un ciclo, in tal modo, andando a prendere solo i valori selected della datagridview, li faccio scrivere all'interno delle Label. non so se mi sono fatto capire; spero di si :)

MarcoGG
15-11-2009, 11:02
no le 11 label sono statiche nel senso che per ogni partita al minimo e al massimo sono 11 giocatori ;). le vorrei indicizzare (posizionando un indice che mi permetta di scorrerle) così da poterle mettere in un ciclo, in tal modo, andando a prendere solo i valori selected della datagridview, li faccio scrivere all'interno delle Label. non so se mi sono fatto capire; spero di si :)

A quanto ho capito vuoi indicizzare per poter individuare in modo univoco una Label nell'insieme di Labels destinate ai giocatori.
Esistono molti modi per farlo.
Ad esempio, i containers di VB.NET sono molto utili per scopi come questo.
Prendiamo un GroupBox, inserisco N Label, e scrivo in ognuna, nella proprietà Tag un numero progressivo e univoco ( da 1 a N ).
Voglio inserire valori essendo sicuro che l'ordine in cui li passo all'insieme delle Label corrisponda alla posizione delle stesse nell'insieme ?

Dim valori() As Integer = {1, 2, 3, 4, 5}

For Each L As Control In GroupBox1.Controls
For i As Integer = 0 To valori.Count - 1
If L.Tag = i + 1 Then
L.Text = valori(i)
Exit For
End If
Next
Next

Se invece le Label sono sulla Form e non voglio/posso usare un container dedicato, posso inventarmi un Tag che mi da informazioni sul tipo e sull'indice. Ad esempio Tag = "giocatore,1" ... ... Tag = "giocatore,N" :

Dim valori() As String = {"A", "B", "C", "D", "E"}

Dim tipoLabel As String
Dim indiceLabel As String
For Each L As Control In Me.Controls
If TypeOf L Is Label And L.Tag <> "" Then
tipoLabel = L.Tag.ToString.Split(",")(0)
indiceLabel = L.Tag.ToString.Split(",")(1)
For i As Integer = 0 To valori.Count - 1
If tipoLabel = "giocatore" And indiceLabel = i + 1 Then
L.Text = valori(i)
Exit For
End If
Next
End If
Next

Sono solo 2 esempi tra mille...
Oltretutto la proprietà Tag di un Control accetta un Object, perciò le possibilità di indicizzazione sono infinite. ;)

Fabio7586
15-11-2009, 23:45
A quanto ho capito vuoi indicizzare per poter individuare in modo univoco una Label nell'insieme di Labels destinate ai giocatori.
Esistono molti modi per farlo.
Ad esempio, i containers di VB.NET sono molto utili per scopi come questo.
Prendiamo un GroupBox, inserisco N Label, e scrivo in ognuna, nella proprietà Tag un numero progressivo e univoco ( da 1 a N ).
Voglio inserire valori essendo sicuro che l'ordine in cui li passo all'insieme delle Label corrisponda alla posizione delle stesse nell'insieme ?

Dim valori() As Integer = {1, 2, 3, 4, 5}

For Each L As Control In GroupBox1.Controls
For i As Integer = 0 To valori.Count - 1
If L.Tag = i + 1 Then
L.Text = valori(i)
Exit For
End If
Next
Next

Se invece le Label sono sulla Form e non voglio/posso usare un container dedicato, posso inventarmi un Tag che mi da informazioni sul tipo e sull'indice. Ad esempio Tag = "giocatore,1" ... ... Tag = "giocatore,N" :

Dim valori() As String = {"A", "B", "C", "D", "E"}

Dim tipoLabel As String
Dim indiceLabel As String
For Each L As Control In Me.Controls
If TypeOf L Is Label And L.Tag <> "" Then
tipoLabel = L.Tag.ToString.Split(",")(0)
indiceLabel = L.Tag.ToString.Split(",")(1)
For i As Integer = 0 To valori.Count - 1
If tipoLabel = "giocatore" And indiceLabel = i + 1 Then
L.Text = valori(i)
Exit For
End If
Next
End If
Next

Sono solo 2 esempi tra mille...
Oltretutto la proprietà Tag di un Control accetta un Object, perciò le possibilità di indicizzazione sono infinite. ;)

Grazie, domani provo il codice e ti faccio sapere! :)

Fabio7586
16-11-2009, 11:35
A quanto ho capito vuoi indicizzare per poter individuare in modo univoco una Label nell'insieme di Labels destinate ai giocatori.
Esistono molti modi per farlo.
Ad esempio, i containers di VB.NET sono molto utili per scopi come questo.
Prendiamo un GroupBox, inserisco N Label, e scrivo in ognuna, nella proprietà Tag un numero progressivo e univoco ( da 1 a N ).
Voglio inserire valori essendo sicuro che l'ordine in cui li passo all'insieme delle Label corrisponda alla posizione delle stesse nell'insieme ?

Dim valori() As Integer = {1, 2, 3, 4, 5}

For Each L As Control In GroupBox1.Controls
For i As Integer = 0 To valori.Count - 1
If L.Tag = i + 1 Then
L.Text = valori(i)
Exit For
End If
Next
Next

Se invece le Label sono sulla Form e non voglio/posso usare un container dedicato, posso inventarmi un Tag che mi da informazioni sul tipo e sull'indice. Ad esempio Tag = "giocatore,1" ... ... Tag = "giocatore,N" :

Dim valori() As String = {"A", "B", "C", "D", "E"}

Dim tipoLabel As String
Dim indiceLabel As String
For Each L As Control In Me.Controls
If TypeOf L Is Label And L.Tag <> "" Then
tipoLabel = L.Tag.ToString.Split(",")(0)
indiceLabel = L.Tag.ToString.Split(",")(1)
For i As Integer = 0 To valori.Count - 1
If tipoLabel = "giocatore" And indiceLabel = i + 1 Then
L.Text = valori(i)
Exit For
End If
Next
End If
Next

Sono solo 2 esempi tra mille...
Oltretutto la proprietà Tag di un Control accetta un Object, perciò le possibilità di indicizzazione sono infinite. ;)

Ho usato il rpimo codice da te postato... graaaande!! :)

Però, però... c'è un però,come faccio a passare i valori di una multiselezione?
Spiego ho un datagrid con 26 giocatori, ne seleziono solo 11(multiselect), vorrei che mi scrivesse uno ad uno i nomi selezionati in ogni label, ci sto provando da stamattina alle sei, ma non riesco a far combaciare gli indici di scorrimento del datagrid e delle label (che tristezza)! :( ;)
Grazie mille!

MarcoGG
16-11-2009, 12:18
Semplice. Se hai scelto di usare la GroupBox è qualcosa di simile a questo ( nel mio caso la DataGridview è "DGV", e il nome Colonna dei giocatori è "Giocatore" ) :

Dim giocatori As New List(Of String)
For Each dgvr As DataGridViewRow In DGV.Rows
If dgvr.Selected Then giocatori.Add(dgvr.Cells("Giocatore").Value)
Next

For Each L As Control In GroupBox1.Controls
For i As Integer = 0 To giocatori.Count - 1
If L.Tag = i + 1 Then
L.Text = giocatori(i)
Exit For
End If
Next
Next

;)

Fabio7586
16-11-2009, 12:31
Semplice. Se hai scelto di usare la GroupBox è qualcosa di simile a questo ( nel mio caso la DataGridview è "DGV", e il nome Colonna dei giocatori è "Giocatore" ) :

Dim giocatori As New List(Of String)
For Each dgvr As DataGridViewRow In DGV.Rows
If dgvr.Selected Then giocatori.Add(dgvr.Cells("Giocatore").Value)
Next

For Each L As Control In GroupBox1.Controls
For i As Integer = 0 To giocatori.Count - 1
If L.Tag = i + 1 Then
L.Text = giocatori(i)
Exit For
End If
Next
Next

;)

:) lol! Nella mia testa era proprio questo l'algoritmo, è nella sintassi e nei comandi che devo fare strada! ;)
e come diceva un' altra persona in un altro therad:
MARCOGG SANTO SUBITO

Fabio7586
16-11-2009, 12:43
Semplice. Se hai scelto di usare la GroupBox è qualcosa di simile a questo ( nel mio caso la DataGridview è "DGV", e il nome Colonna dei giocatori è "Giocatore" ) :

Dim giocatori As New List(Of String)
For Each dgvr As DataGridViewRow In DGV.Rows
If dgvr.Selected Then giocatori.Add(dgvr.Cells("Giocatore").Value)
Next

For Each L As Control In GroupBox1.Controls
For i As Integer = 0 To giocatori.Count - 1
If L.Tag = i + 1 Then
L.Text = giocatori(i)
Exit For
End If
Next
Next

;)

e se dove ho sottolineato volessi mettere anche il nome o altri campi del database come devo fare? ho provato ad aggiungere la stessa istruzione, ma da errore come era prevedibile

MarcoGG
16-11-2009, 13:21
:) lol! Nella mia testa era proprio questo l'algoritmo, è nella sintassi e nei comandi che devo fare strada! ;)
e come diceva un' altra persona in un altro therad:
MARCOGG SANTO SUBITO

LOL ! :D

e se dove ho sottolineato volessi mettere anche il nome o altri campi del database come devo fare? ho provato ad aggiungere la stessa istruzione, ma da errore come era prevedibile

Beh, basta che concateni i vari .Value delle celle che ti interessano in un'unica stringa, e la aggiungi alla List, oppure in modo più strutturato, ti crei una Structure "Giocatore" con i campi di interesse che popoli con le celle della Row selezionata, e poi inserisci nella List ( che in questo caso non sarà più una List(Of String), ma una List(Of Giocatore) ). ;)

Fabio7586
16-11-2009, 14:15
Questo è il codice:
Structure giocatore
Dim cognome As String
Dim nome As String
End Structure
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If DataGIOC.SelectedRows.Count > 11 Then
MessageBox.Show("Sono stati selezionati più di 11 giocatori, restringere la scelta!", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
ElseIf DataGIOC.SelectedRows.Count < 11 Then
MessageBox.Show("Sono stati selezionati meno di 11 giocatori, ampliare la scelta la scelta!", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
ElseIf DataGIOC.SelectedRows.Count = 11 Then
Dim gioc As New giocatore
Dim giocatori As New List(Of giocatore)
For Each dgvr As DataGridViewRow In DataGIOC.Rows
If dgvr.Selected Then
gioc.cognome = dgvr.Cells("COGNOME").Value
gioc.nome = dgvr.Cells("NOME").Value
End If
Next
For Each L As Control In GroupBox1.Controls
For i As Integer = 0 To giocatori.Count - 1
If L.Tag = i + 1 Then
L.Text = gioc.cognome & " " & gioc.nome
Exit For
End If
Next
Next

End If


End Sub
la structure l'ho creata, ma non riesco a scorrere la struct ed a inserire i campi, il problema sta nel codice sottolineato perchè ho inserito un interrupt e in quel ciclo non entra. dov'è l'errore?

MarcoGG
16-11-2009, 14:42
Parecchi errori, purtroppo, a cominciare da quegli "Else If" dopo un Exit Sub, New giocatore al di fuori del ciclo, e infine il riferimento ancora su gioc, mentre dovrebbe essere sull'elemento i-esimo della List...

Faccio prima a riscriverlo che a correggerlo :

Structure giocatore
Public cognome As String
Public nome As String
End Structure

e :

Dim giocatori As New List(Of giocatore)
For Each dgvr As DataGridViewRow In DGV.Rows
If dgvr.Selected Then
Dim G As New giocatore
G.cognome = dgvr.Cells("Cognome").Value
G.nome = dgvr.Cells("Nome").Value
giocatori.Add(G)
End If
Next

For Each L As Control In GroupBox1.Controls
For i As Integer = 0 To giocatori.Count - 1
If L.Tag = i + 1 Then
L.Text = giocatori(i).cognome & " " & giocatori(i).nome
Exit For
End If
Next
Next

Fabio7586
16-11-2009, 16:06
Parecchi errori, purtroppo, a cominciare da quegli "Else If" dopo un Exit Sub, New giocatore al di fuori del ciclo, e infine il riferimento ancora su gioc, mentre dovrebbe essere sull'elemento i-esimo della List...

Faccio prima a riscriverlo che a correggerlo :

Structure giocatore
Public cognome As String
Public nome As String
End Structure

e :

Dim giocatori As New List(Of giocatore)
For Each dgvr As DataGridViewRow In DGV.Rows
If dgvr.Selected Then
Dim G As New giocatore
G.cognome = dgvr.Cells("Cognome").Value
G.nome = dgvr.Cells("Nome").Value
giocatori.Add(G)
End If
Next

For Each L As Control In GroupBox1.Controls
For i As Integer = 0 To giocatori.Count - 1
If L.Tag = i + 1 Then
L.Text = giocatori(i).cognome & " " & giocatori(i).nome
Exit For
End If
Next
Next

Come ti dicevo prima, programmo saltuariamente, perchè purtroppo non ho tanto tempo tra lavoro, università e ragazza, e tutti i programmi che faccio, solitamente sono le stesse identiche cose, con piccoli riaddattamenti del codice ;)

Mi diresti come fare a colorare di volta in volta una riga a seconda del valore che ha il campo ruolo?

MarcoGG
17-11-2009, 08:23
Mi diresti come fare a colorare di volta in volta una riga a seconda del valore che ha il campo ruolo?


Semplice :

For Each dgvr As DataGridViewRow In DGV.Rows
Select Case dgvr.Cells("Ruolo").Value
Case "Portiere"
dgvr.DefaultCellStyle.BackColor = Color.Tan

Case "Difensore"
dgvr.DefaultCellStyle.BackColor = Color.Lime

Case "Attaccante"
dgvr.DefaultCellStyle.BackColor = Color.Yellow

'...

Case Else
'...

End Select
Next

Fabio7586
17-11-2009, 11:06
Semplice :

For Each dgvr As DataGridViewRow In DGV.Rows
Select Case dgvr.Cells("Ruolo").Value
Case "Portiere"
dgvr.DefaultCellStyle.BackColor = Color.Tan

Case "Difensore"
dgvr.DefaultCellStyle.BackColor = Color.Lime

Case "Attaccante"
dgvr.DefaultCellStyle.BackColor = Color.Yellow

'...

Case Else
'...

End Select
Next

Grazie mille,sei veramente unmostro di bravura ;)

Mi servirebbe sapere unulteriore cosa, come faccio a prelevare i valori dalle label all'interno ella groupbox? e per colorarli invece all'interno della group a seconda del ruolo?
ho pensato di fare riferimento alla tag e conseguentemente al .text dell'oggeto di riferimento della tag, ma non so come scriverlo (sempre se ho pensato bene)!

MarcoGG
17-11-2009, 11:46
come faccio a prelevare i valori dalle label all'interno ella groupbox?


Beh, basta che li leggi, con il solito For Each... :stordita:


e per colorarli invece all'interno della group a seconda del ruolo?


Puoi modificare il Tag delle Label in modo che abbia un formato del genere :
Tag = indice,ruolo
A questo punto però dovrai anche modificare il codice che abbiamo visto al post #7.
Il Tag lo setti in fase di estrazione dei dati dalla DataGridView, e poi con la solita Select Case decidi che colore debba avere la Label a seconda del ruolo...

Fabio7586
17-11-2009, 13:00
Beh, basta che li leggi, con il solito For Each... :stordita:

Puoi modificare il Tag delle Label in modo che abbia un formato del genere :
Tag = indice,ruolo
A questo punto però dovrai anche modificare il codice che abbiamo visto al post #7.
Il Tag lo setti in fase di estrazione dei dati dalla DataGridView, e poi con la solita Select Case decidi che colore debba avere la Label a seconda del ruolo...

Lo so che è chiederti un po troppo, non è che mi posteresti il codice, perchè mi è difficile comprendere a parole

MarcoGG
17-11-2009, 13:28
Semplice.
Basta modificare il Tag in ogni Label nella GroupBox.
Tag di default = 1,ruolo

A questo punto :

Structure giocatore
Public cognome As String
Public nome As String
Public ruolo As String
End Structure

e :

Dim giocatori As New List(Of giocatore)
For Each dgvr As DataGridViewRow In DGV.Rows
If dgvr.Selected Then
Dim G As New giocatore
G.cognome = dgvr.Cells("Cognome").Value
G.nome = dgvr.Cells("Nome").Value
G.ruolo = dgvr.Cells("Ruolo").Value
giocatori.Add(G)
End If
Next

Dim indice As Integer = 0
For Each L As Control In GroupBox1.Controls
For i As Integer = 0 To giocatori.Count - 1
indice = L.Tag.ToString.Split(",")(0)
If indice = i + 1 Then
L.Text = giocatori(i).cognome & " " & giocatori(i).nome
L.Tag = indice & "," & giocatori(i).ruolo
Exit For
End If
Next
Next

Dim ruolo As String
For Each L As Control In GroupBox1.Controls
ruolo = L.Tag.ToString.Split(",")(1)
Select Case ruolo
Case "Portiere"
L.BackColor = Color.Tan
Case "Difensore"
L.BackColor = Color.Lime
Case "Attaccante"
L.BackColor = Color.Yellow
'...
Case Else
L.BackColor = Color.White
End Select
Next

Fabio7586
18-11-2009, 09:03
Grazie per tutto l'aiuto che mi dai!

Avendo ora messo una doppia tag (indice, ruolo), come faccio a riconoscere univocamente la posizione della label all'interno della groupbox?
avevo provato a scrivere
For Each L As Control In GroupBox1.Controls

if l.tag=1 then
....
...
end if
NEXT ma giustamente mi dice Cast non valido dalla stringa "1,PORTIERE" al tipo 'Double'. come faccio a risolvere?

MarcoGG
18-11-2009, 09:34
Grazie per tutto l'aiuto che mi dai!

Avendo ora messo una doppia tag (indice, ruolo), come faccio a riconoscere univocamente la posizione della label all'interno della groupbox?
avevo provato a scrivere if l.tag=1 then
....
...
end if ma giustamente mi dice Cast non valido dalla stringa "1,PORTIERE" al tipo 'Double'. come faccio a risolvere?

Semplice :
If L.Tag.ToString.Split(",")(0) Then
'...
End If

Però rileggendo stavo pensando anche a questa soluzione :

- Mettiamo di avere una GroupBox vuota, senza alcuna Label, e di aggiungere dinamicamente le Label, una volta completata la selezione sul DGV.

> Mi creo una classe che eredita da Label, per semplificarmi le cose :

Public Class LblG
Inherits Label

Private m_indice As Integer
Private m_ruolo As String

Public Property indice() As Integer
Get
Return m_indice
End Get
Set(ByVal value As Integer)
m_indice = value
End Set
End Property

Public Property ruolo() As String
Get
Return m_ruolo
End Get
Set(ByVal value As String)
m_ruolo = value
Select Case m_ruolo
Case "Portiere"
Me.BackColor = Color.Tan
Case "Difensore"
Me.BackColor = Color.Lime
Case "Attaccante"
Me.BackColor = Color.Yellow
'...
Case Else
Me.BackColor = Color.White
End Select
End Set
End Property

Public Sub New(ByVal indice As Integer)

Me.indice = indice
Me.AutoSize = False
Me.BorderStyle = Windows.Forms.BorderStyle.FixedSingle
Me.Font = New Font("Arial", 12, FontStyle.Regular)
Me.TextAlign = ContentAlignment.MiddleLeft
Me.Height = 20
Me.Width = 300
Me.Left = 10
Me.Top = (m_indice - 1) * (Me.Height + 10) + 20

End Sub

End Class

> Creo le Label nel GroupBox :

GroupBox1.Controls.Clear()
Dim cnt As Integer = 0
For Each dgvr As DataGridViewRow In DGV.Rows
If dgvr.Selected Then
cnt += 1
Dim LG As New LblG(cnt)
LG.Text = dgvr.Cells("Cognome").Value & " " & dgvr.Cells("Nome").Value
LG.ruolo = dgvr.Cells("Ruolo").Value
GroupBox1.Controls.Add(LG)
End If
Next

> Individuo una Label per indice :

For Each LG As LblG In GroupBox1.Controls
If LG.indice = 3 Then MsgBox(LG.Text & " - " & LG.ruolo)
Next

Mi piace molto di più della precedente... :p

Fabio7586
18-11-2009, 12:42
Semplice :
If L.Tag.ToString.Split(",")(0) Then
'...
End If

Però rileggendo stavo pensando anche a questa soluzione :

- Mettiamo di avere una GroupBox vuota, senza alcuna Label, e di aggiungere dinamicamente le Label, una volta completata la selezione sul DGV.

> Mi creo una classe che eredita da Label, per semplificarmi le cose :

Public Class LblG
Inherits Label

Private m_indice As Integer
Private m_ruolo As String

Public Property indice() As Integer
Get
Return m_indice
End Get
Set(ByVal value As Integer)
m_indice = value
End Set
End Property

Public Property ruolo() As String
Get
Return m_ruolo
End Get
Set(ByVal value As String)
m_ruolo = value
Select Case m_ruolo
Case "Portiere"
Me.BackColor = Color.Tan
Case "Difensore"
Me.BackColor = Color.Lime
Case "Attaccante"
Me.BackColor = Color.Yellow
'...
Case Else
Me.BackColor = Color.White
End Select
End Set
End Property

Public Sub New(ByVal indice As Integer)

Me.indice = indice
Me.AutoSize = False
Me.BorderStyle = Windows.Forms.BorderStyle.FixedSingle
Me.Font = New Font("Arial", 12, FontStyle.Regular)
Me.TextAlign = ContentAlignment.MiddleLeft
Me.Height = 20
Me.Width = 300
Me.Left = 10
Me.Top = (m_indice - 1) * (Me.Height + 10) + 20

End Sub

End Class

> Creo le Label nel GroupBox :

GroupBox1.Controls.Clear()
Dim cnt As Integer = 0
For Each dgvr As DataGridViewRow In DGV.Rows
If dgvr.Selected Then
cnt += 1
Dim LG As New LblG(cnt)
LG.Text = dgvr.Cells("Cognome").Value & " " & dgvr.Cells("Nome").Value
LG.ruolo = dgvr.Cells("Ruolo").Value
GroupBox1.Controls.Add(LG)
End If
Next

> Individuo una Label per indice :

For Each LG As LblG In GroupBox1.Controls
If LG.indice = 3 Then MsgBox(LG.Text & " - " & LG.ruolo)
Next

Mi piace molto di più della precedente... :p

mio dio, ma lo scrivi senza nemmeno provarlo il codice? almeno ti retribuiscono come dovuto per la tua bravura (immagino che tu lavora nel campo,giusto?)? Sono senza parole...se una macchina sparacodice ^_^

MarcoGG
18-11-2009, 14:30
mio dio, ma lo scrivi senza nemmeno provarlo il codice? almeno ti retribuiscono come dovuto per la tua bravura (immagino che tu lavora nel campo,giusto?)? Sono senza parole...se una macchina sparacodice ^_^

Beh, mettiamola così, quando mi chiedono di fare un prezzo sparo bello alto, così poi si arriva più o meno a quanto mi ero prefissato... :D