
oretovalley (Normal User)
Pro
    
Messaggi: 109
Iscritto: 12/04/2009
|
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:
Codice sorgente - presumibilmente VB.NET |
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
|
|
|

ruggy94 (Member)
Guru
    
Messaggi: 890
Iscritto: 21/04/2008
|
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:
Codice sorgente - presumibilmente VB.NET |
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
|
|

Gianluca87 (Ex-Member)
Expert
    
Messaggi: 300
Iscritto: 16/11/2008
|
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 il 02/11/2009 alle 23:34 |
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
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. |
|

Gianluca87 (Ex-Member)
Expert
    
Messaggi: 300
Iscritto: 16/11/2008
|
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.. |
|

oretovalley (Normal User)
Pro
    
Messaggi: 109
Iscritto: 12/04/2009
|
ok funziona tutto a meraviglia 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:
Codice sorgente - presumibilmente VB.NET |
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 il 04/11/2009 alle 20:14 |
|

oretovalley (Normal User)
Pro
    
Messaggi: 109
Iscritto: 12/04/2009
|
ho risolto usando Panel1.Controls.Clear()
|
|

oretovalley (Normal User)
Pro
    
Messaggi: 109
Iscritto: 12/04/2009
|
ho un'altro problema vorrei sapere come una volta associato alle label un contextmenustrip posso passargli il nome della label appena cliccata ?
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Forse con la proprietà OwnerItem, ma non sono sicuro...
|
|