Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Gestire eventi con label create in esecuzione
Forum - C# / VB.NET - [VB.NET] Gestire eventi con label create in esecuzione

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
oretovalley (Normal User)
Pro


Messaggi: 109
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 22:38
Domenica, 01/11/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

  1. Private Sub Interfaccia_Principale_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.         For column = 1 To 50
  3.             Dim lbl As New Label
  4.             lbl.SetBounds(0, column * 20, 50, 20)
  5.             lbl.BorderStyle = BorderStyle.FixedSingle
  6.             lbl.BackColor = Color.LightGray
  7.             lbl.Text = column
  8.             Panel1.Controls.Add(lbl)
  9.         Next
  10. End Sub


PM Quote
Avatar
ruggy94 (Member)
Guru


Messaggi: 890
Iscritto: 21/04/2008

Segnala al moderatore
Postato alle 23:03
Domenica, 01/11/2009
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

  1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.         'Codice per la creazione delle label...
  3.  
  4.         AddHandler GetLbl(3).Click, AddressOf Lbl3_Click
  5.     End Sub
  6.  
  7. Private Function GetLbl(ByVal N As Byte) As Label
  8.         For Each C As Control In Me.Controls
  9.             If C.Name = "lbl" & N Then
  10.                 Return C
  11.             End If
  12.         Next
  13.     End Function
  14.  
  15.     Private Sub Lbl3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
  16.         MessageBox.Show(sender.name)
  17.     End Sub


Chiaramente è solo un esempio, e dovrai adattare il codice alle tue esigenze ;)


"Se vuoi che una funzione di un programma non venga mai trovata, descrivila nella documentazione"
PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 23:32
Lunedì, 02/11/2009
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


a domanda precisa, risposta precisa...
a domanda generica, risposta generica...
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:50
Martedì, 03/11/2009
Testo quotato

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.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 18:38
Martedì, 03/11/2009
Testo quotato

Postato originariamente da Il Totem:

Testo quotato

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..


a domanda precisa, risposta precisa...
a domanda generica, risposta generica...
PM Quote
Avatar
oretovalley (Normal User)
Pro


Messaggi: 109
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 20:07
Mercoledì, 04/11/2009
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:

Codice sorgente - presumibilmente VB.NET

  1. Function carica_contatti()
  2.         Dim objScaricaURL As New ScaricaURL
  3.         objScaricaURL.SetURL("http://localhost/msn_test/contatti.php?nick=" & TextBox1.Text)
  4.         Try
  5.             vettore = System.Text.RegularExpressions.Regex.Replace(objScaricaURL.Scarica, "", "").Split(";")
  6.         Catch ex As Exception
  7.         End Try
  8.  
  9.         For indice = 0 To UBound(vettore) - 1
  10.             Dim new_label As New Label
  11.             new_label.SetBounds(0, indice * 20, 100, 20)
  12.             new_label.BorderStyle = BorderStyle.FixedSingle
  13.  
  14.             objScaricaURL.SetURL("http://localhost/msn_test/controlla_stato.php?cercato=" & vettore(indice))
  15.             Try
  16.                 If "offline" = System.Text.RegularExpressions.Regex.Replace(objScaricaURL.Scarica, "", "") Then
  17.                     new_label.BackColor = Color.LightGray
  18.                 ElseIf "online" = System.Text.RegularExpressions.Regex.Replace(objScaricaURL.Scarica, "", "") Then                    
  19.                     new_label.BackColor = Color.LightGreen
  20.                 End If
  21.             Catch ex As Exception
  22.             End Try
  23.             new_label.Text = vettore(indice)
  24.             Panel1.Controls.Add(new_label)
  25.             AddHandler new_label.MouseClick, AddressOf new_label_Click
  26.         Next
  27.     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
PM Quote
Avatar
oretovalley (Normal User)
Pro


Messaggi: 109
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 20:23
Mercoledì, 04/11/2009
ho risolto usando  Panel1.Controls.Clear()

PM Quote
Avatar
oretovalley (Normal User)
Pro


Messaggi: 109
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 14:15
Giovedì, 05/11/2009
ho un'altro problema vorrei sapere come una volta associato alle label un contextmenustrip posso passargli il nome della label appena cliccata ?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:27
Giovedì, 05/11/2009
Forse con la proprietà OwnerItem, ma non sono sicuro...


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo