Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicit� Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Forum :: Programmazione.it :: VB.NET :: Eliminare Label Creata da Codice
Scritto da Mauro Russo a.k.a. rumauro il 25-04-2016 ore 17:59
Ciao, spero che qualcuno di voi sappia e voglia aiutarmi, il mio problema che da codice mi creo 6 Label in questo modo:

Friend WithEvents LblTitolo As Label

F = 160
For D = 0 To 5
LblTitolo = New Label 'creo le label
With LblTitolo
.Name = "lbltitolo" & D
.AutoSize = False
.Size = New Size(70, 26)
.BorderStyle = BorderStyle.FixedSingle
.Location = New Point(F, 150)
.Font = New Font("Times New Roman", 10, FontStyle.Bold)
.TextAlign = ContentAlignment.MiddleCenter
.Text = "Dist. " & D + 1 & "-" & D + 2
.ForeColor = Color.Yellow
.BackColor = Color.Green
.Visible = True
End With
Main.Controls.Add(LblTitolo) 'Attivo il controllo creato
F += 74
Next


Come vedete ho usato "F" (Dichiarato prima) per potermi spostare, quindi tutto perfetto mi scrive le label ed il loro contenuto.
Il problema nasce quando vado a cancellare queste label, perch il comando

main.Riduzioni.Controls.Remove(LblTitolo)
LblTitolo = Nothing

mi cancella solo l'ultima.. ho provato di tutto, ciclo for.. e altro ma niente.. qualcuno ha la soluzione?
Grazie
Precedente: Neolaureati in discipline tecniche / informatiche
Successiva: Back-end developer senior [ Roma ]
Intervento di Fabio Degl'innocenti a.k.a. fabiowin98 del 27-04-2016 ore 12:12, Pistoia (PT)
Plebeo
Plebeo
(47 interventi)
Iscritto il 20-06-2011
ti cancella solo l'ultima perch all'interno di LblTitolo rimane il riferimento all'ultima label creata.

Per cancellare tutte le label devi fare un ciclo for each sull'array di controlli cos:

Dim c As Control
Dim toDelete As Control
toDelete = Nothing
For Each c In Main.Controls
If c.Name = "lbl5" Then
toDelete = c
Exit For
End If
Next
If Not toDelete Is Nothing Then
Main.Controls.Remove(toDelete)
End If

Nota che devi per forza creare toDelete ed eliminarla fuori dal ciclo for each altrimenti la collection Main.Controls sar modificata all'interno del ciclo e dar un errore in runtime.
Intervento di Mauro Russo a.k.a. rumauro del 28-04-2016 ore 15:33, Porto torres (SS)
Plebeo
Plebeo
(2 interventi)
Iscritto il 20-07-2007
dunque ho provato, ma non ha cancellato niente, avr sbagliato l'inserimento dell'Array??
Intervento di Fabio Degl'innocenti a.k.a. fabiowin98 del 28-04-2016 ore 17:11, Pistoia (PT)
Plebeo
Plebeo
(47 interventi)
Iscritto il 20-06-2011
rumauro ha scritto:
dunque ho provato, ma non ha cancellato niente, avr sbagliato l'inserimento dell'Array??

Puoi fornire il codice completo?
Intervento di Mauro Russo a.k.a. rumauro del 30-04-2016 ore 18:53, Porto torres (SS)
Plebeo
Plebeo
(2 interventi)
Iscritto il 20-07-2007
Dunque :

For Z = 0 To 5
main.Controls.Remove(main.LblTitolo)
main.LblTitolo = Nothing
Dim c As Control
Dim toDelete(Z) As Control
toDelete(Z) = Nothing
For Each c In main.Controls
If c.Name = "LblTitolo" & Z Then
toDelete(Z) = c
Exit For
End If
Next
If Not toDelete Is Nothing Then
main.Controls.Remove(toDelete(Z))
End If
Next


ovviamente ho provato anche senza il ciclo for, e non cancella niente, esattamente come con il ciclo for :-(
so che sono io la capra, anche perch facendoli uno per volta, ripetendo 5 volte la procedura per creare la label, con nomi diversi poi le cancello, ma cos mi sembra pi pulito e anche fatto meglio..
Copyright Programmazione.it™ 1999-2017. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.13 secondi.