Oppure

Loading
01/11/09 21:38
oretovalley
Ciao a tutti sto creando un programma in VB.NET e ho creato con un metodo abbastanza semplice un numero n di label, adesso mi servirebbe gestire degli eventi riguardo a queste label, ad esempio il click ecc... ma non so come fare. Il codice che uso per creare le label è questo:

Private Sub Interfaccia_Principale_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For column = 1 To 50
            Dim lbl As New Label
            lbl.SetBounds(0, column * 20, 50, 20)
            lbl.BorderStyle = BorderStyle.FixedSingle
            lbl.BackColor = Color.LightGray
            lbl.Text = column
            Panel1.Controls.Add(lbl)
        Next
End Sub
aaa
01/11/09 22:03
ruggy94
Innanzitutto assegna un nome alle label che crei (ad esempio puoi chiamarle lbl1, lbl2, lbl3, etc.).
Poi, per gestire il Click della lbl3, puoi fare qualcosa del genere:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Codice per la creazione delle label...

        AddHandler GetLbl(3).Click, AddressOf Lbl3_Click
    End Sub

Private Function GetLbl(ByVal N As Byte) As Label
        For Each C As Control In Me.Controls
            If C.Name = "lbl" & N Then
                Return C
            End If
        Next
    End Function

    Private Sub Lbl3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        MessageBox.Show(sender.name)
    End Sub

Chiaramente è solo un esempio, e dovrai adattare il codice alle tue esigenze ;)
aaa
02/11/09 22:32
Gianluca87
dipende da cosa devi fare... se gestire gli eventi di tutte le label su una sola funzione ti basta associare al evento click di tutte le label la stessa fuonzione, per capire quale label chiama la funzione la casti dentro l'evento e recuperi l'oggetto della label che ha chiamato l'evento...ovviamente dipende da che ci devi fare...

private void Label_Click(object sender, EventArgs e)
{
Label label = ((Label)sender);
}
Ultima modifica effettuata da Gianluca87 02/11/09 22:34
aaa
03/11/09 16:50
Il Totem
Postato originariamente da Gianluca87:

dipende da cosa devi fare... se gestire gli eventi di tutte le label su una sola funzione ti basta associare al evento click di tutte le label la stessa fuonzione, per capire quale label chiama la funzione la casti dentro l'evento e recuperi l'oggetto della label che ha chiamato l'evento...ovviamente dipende da che ci devi fare...

private void Label_Click(object sender, EventArgs e)
{
Label label = ((Label)sender);
}

In pratica hai detto: "Per gestire l'evento click di ogni label devi associare l'evento click a ogni label". Abbastanza ovvio: il codice di ruggy fa quello che tu hai sottointeso.

Ricorda di assegnare la proprietà Name nel For, altrimenti il codice di ruggy non può andare.
aaa
03/11/09 17:38
Gianluca87
Postato originariamente da Il Totem:

Postato originariamente da Gianluca87:

dipende da cosa devi fare... se gestire gli eventi di tutte le label su una sola funzione ti basta associare al evento click di tutte le label la stessa fuonzione, per capire quale label chiama la funzione la casti dentro l'evento e recuperi l'oggetto della label che ha chiamato l'evento...ovviamente dipende da che ci devi fare...

private void Label_Click(object sender, EventArgs e)
{
Label label = ((Label)sender);
}

In pratica hai detto: "Per gestire l'evento click di ogni label devi associare l'evento click a ogni label". Abbastanza ovvio: il codice di ruggy fa quello che tu hai sottointeso.

Ricorda di assegnare la proprietà Name nel For, altrimenti il codice di ruggy non può andare.

yes sorry ma non avevo letto...magica cache di IE..
aaa
04/11/09 19:07
oretovalley
ok funziona tutto a meraviglia :D grazie mille
Ora vorrei sapere un'altra cosa, io grazie a queste label dinamiche carico una lista di contatti da un database, adesso nel database c'è anche un campo che mi dice se l'utente è online oppure offline, e tramite un file php io dal vb.net mi connetto a quest'ultimo e mi prendo la stringa restituita dal file php che a sua volta la preleva direttamente dal database tutto funziona perfettamente, solo che io volevo colorare la label in verde se l'utente è online, e in grigio se è offline, adesso questo funziona perfettamente solo all'inizio, ma dopo aver caricato il colore quest'ultimo non viene più modificato nonostante io con un timer ogni 2 secondi richiami la funzione per ricaricare la lista. Come posso fare? questo è il codice che uso:

Function carica_contatti()
        Dim objScaricaURL As New ScaricaURL
        objScaricaURL.SetURL("http://localhost/msn_test/contatti.php?nick=" & TextBox1.Text)
        Try
            vettore = System.Text.RegularExpressions.Regex.Replace(objScaricaURL.Scarica, "", "").Split(";")
        Catch ex As Exception
        End Try

        For indice = 0 To UBound(vettore) - 1
            Dim new_label As New Label
            new_label.SetBounds(0, indice * 20, 100, 20)
            new_label.BorderStyle = BorderStyle.FixedSingle

            objScaricaURL.SetURL("http://localhost/msn_test/controlla_stato.php?cercato=" & vettore(indice))
            Try
                If "offline" = System.Text.RegularExpressions.Regex.Replace(objScaricaURL.Scarica, "", "") Then
                    new_label.BackColor = Color.LightGray
                ElseIf "online" = System.Text.RegularExpressions.Regex.Replace(objScaricaURL.Scarica, "", "") Then                    
                    new_label.BackColor = Color.LightGreen
                End If
            Catch ex As Exception
            End Try
            new_label.Text = vettore(indice)
            Panel1.Controls.Add(new_label)
            AddHandler new_label.MouseClick, AddressOf new_label_Click
        Next
    End Function


la soluzione più ovvia sarebbe un dispose delle varie label ma come lo faccio con label create in esecuzione ?
Ultima modifica effettuata da oretovalley 04/11/09 19:14
aaa
04/11/09 19:23
oretovalley
ho risolto usando Panel1.Controls.Clear()
aaa
05/11/09 13:15
oretovalley
ho un'altro problema vorrei sapere come una volta associato alle label un contextmenustrip posso passargli il nome della label appena cliccata ?
aaa