Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Google ha appena rinnovato la sua celebre serie A con il Pixel 10a, lo smartphone della serie più conveniente se consideriamo il rapporto tra costo e prestazioni. Con il chip Tensor G4, un design raffinato soprattutto sul retro e l'integrazione profonda di Gemini, il colosso di Mountain View promette un'esperienza premium a un prezzo accessibile. E il retro non ha nessuno scalino
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
Al MWC Qualcomm annuncia una coalizione industriale per lanciare il 6G entro il 2029 e introduce agenti IA per la gestione autonoma della RAN. Ericsson, presente sul palco, conferma la direzione: le reti del futuro saranno IA-native fin dalla progettazione
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air è un ultraleggero da 1 kg con Ryzen 5 6600H, display 14" 16:10 e 16 GB LPDDR5. Offre buona portabilità, autonomia discreta e costruzione in alluminio, ma storage PCIe 3.0 e RAM saldata limitano l'espandibilità. A 549 euro sfida brand più noti nella stessa fascia di mercato.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-11-2009, 17:04   #1
Fabio7586
Senior Member
 
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
[VB.NET]Indicizzare label o textbox

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
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...?
Fabio7586 è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2009, 21:34   #2
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
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" ?
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2009, 23:25   #3
Fabio7586
Senior Member
 
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
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
Fabio7586 è offline   Rispondi citando il messaggio o parte di esso
Old 15-11-2009, 12:02   #4
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Fabio7586 Guarda i messaggi
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 ?

Codice:
       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" :

Codice:
        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.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 00:45   #5
Fabio7586
Senior Member
 
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
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 ?

Codice:
       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" :

Codice:
        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 è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 12:35   #6
Fabio7586
Senior Member
 
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
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 ?

Codice:
       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" :

Codice:
        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!
Fabio7586 è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 13:18   #7
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
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" ) :

Codice:
        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
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 13:31   #8
Fabio7586
Senior Member
 
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
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" ) :

Codice:
        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 è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 13:43   #9
Fabio7586
Senior Member
 
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
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" ) :

Codice:
        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
Fabio7586 è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 14:21   #10
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Fabio7586 Guarda i messaggi
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 !

Quote:
Originariamente inviato da Fabio7586 Guarda i messaggi
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) ).
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 15:15   #11
Fabio7586
Senior Member
 
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
Questo è il codice:
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?
Fabio7586 è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 15:42   #12
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
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 :

Codice:
    Structure giocatore
        Public cognome As String
        Public nome As String
    End Structure
e :

Codice:
        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
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2009, 17:06   #13
Fabio7586
Senior Member
 
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
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 :

Codice:
    Structure giocatore
        Public cognome As String
        Public nome As String
    End Structure
e :

Codice:
        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?
Fabio7586 è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2009, 09:23   #14
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Fabio7586 Guarda i messaggi
Mi diresti come fare a colorare di volta in volta una riga a seconda del valore che ha il campo ruolo?
Semplice :

Codice:
        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
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2009, 12:06   #15
Fabio7586
Senior Member
 
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Semplice :

Codice:
        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)!

Ultima modifica di Fabio7586 : 17-11-2009 alle 12:08.
Fabio7586 è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2009, 12:46   #16
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Fabio7586 Guarda i messaggi
come faccio a prelevare i valori dalle label all'interno ella groupbox?
Beh, basta che li leggi, con il solito For Each...

Quote:
Originariamente inviato da Fabio7586 Guarda i messaggi
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...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2009, 14:00   #17
Fabio7586
Senior Member
 
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Beh, basta che li leggi, con il solito For Each...

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
Fabio7586 è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2009, 14:28   #18
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Semplice.
Basta modificare il Tag in ogni Label nella GroupBox.
Tag di default = 1,ruolo

A questo punto :

Codice:
    Structure giocatore
        Public cognome As String
        Public nome As String
        Public ruolo As String
    End Structure
e :

Codice:
        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
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 18-11-2009, 10:03   #19
Fabio7586
Senior Member
 
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
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
Codice:
 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?

Ultima modifica di Fabio7586 : 18-11-2009 alle 10:30.
Fabio7586 è offline   Rispondi citando il messaggio o parte di esso
Old 18-11-2009, 10:34   #20
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Fabio7586 Guarda i messaggi
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
Codice:
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 :
Codice:
        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 :

Codice:
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 :

Codice:
        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 :

Codice:
        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...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso CHUWI CoreBook Air alla prova: design premium, b...
Roborock Saros 20: il robot preciso e molto sottile Roborock Saros 20: il robot preciso e molto sott...
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm ASUS ROG Kithara: quando HIFIMAN incontra il gam...
NVIDIA: la scarsità di hardware c...
Nintendo fa causa al governo USA per i d...
iPhone 17 256GB a 899€, MacBook Air 16/2...
C'è l'IA dietro la tua canzone pr...
Rocket Lab ha posticipato il lancio del ...
Dalla missione Artemis IV il razzo spazi...
Una delle sonde europee di ESA Proba-3 h...
Un modder fa girare Linux su PS5: GTA V ...
MacBook Neo: nessuna sorpresa nei primi ...
La serie POCO X8 Pro è pronta al ...
Smartphone: 2026 difficile per il mercat...
Star Wars: Knights of the Old Republic R...
Huang, NVIDIA: OpenClaw ha realizzato in...
Annunciano il recupero di 4,8 milioni di...
Oggi degli ottimi auricolari Sony con ca...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:44.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v