ho il seguente codice che genera delle picture box in una determina zona del
form:
Dim pic As New PictureBox
pic.Location = New System.Drawing.Point(321 + pos, 387)
pic.Size = New System.Drawing.Size(80, 294)
pic.Image = New System.Drawing.Bitmap("C:\PLC\MODULO_MASTER_80.bmp")
Me.Controls.Add(pic)
pos += 100
Avrei bisogno di cancellarle tutte tramite un'altra sub
Dim pic As New PictureBox
Me.Controls.Remove(pic)
ma non funziona sapreste darmi una dritta?
Grazie
Il metodo .Remove ragiona in termini di riferimenti, se preferisci
puntatori, ad oggetti.... gli dai un istanza di oggetto da togliere e,
se viene trova nell'insieme specificato, viene rimossa.
Ora, guarda bene come appare il tuo codice, ridotto ai minimi termini:
Dim pic As New PictureBox
Me.Controls.Add(pic)
Dim pic As New PictureBox
Me.Controls.Remove(pic)
Quanti oggetti PictureBox hai generato?
Due
Quanti ne hai aggiunto alla Form?
Uno
Come fa il compilatore a capire che il secondo oggetto generato,
quello che vuoi rimuovere, è lo stesso oggetto che hai aggiunto
prima?
Non può, perchè appunto sono due entità completamente distinte
Quindi devi regolarti diversamente:
Devi mantenere un riferimento a tutti gli oggetti PictureBox che
aggiungi, per poterci risalire in seguito, oppure lavorare per indice
con .RemoveAt, oppure impostare un .Name che sia univoco per ogni
oggetto che aggiungi, e scorrere la lista Controls ecc...
Nel caso particolare, se vuoi togliere *tutti* i PictureBox presenti
senza distinzione, puoi usare ancora un altro approccio, cioè
ragionare per tipo:
Dim c As Control
For i As Integer = Me.Controls.Count -1 To 0 Step -1
'Per usare .Remove sullo stesso insieme che stai scorrendo
'Il ciclo va fatto per indice e al contrario, altrimenti va in
errore.
If TypeOf c Is PictureBox Then
Me.Controls.RemoveAt(i)
End If
Next
Dim c As Control
For i As Integer = Me.Controls.Count -1 To 0 Step -1
'Per usare .Remove sullo stesso insieme che stai scorrendo
'Il ciclo va fatto per indice e al contrario, altrimenti va in
errore.
If TypeOf c Is PictureBox Then
Me.Controls.RemoveAt(i)
End If
Next
se invece volessi assegnare dei nomi ai vari picturebox come devo procedere.
Grazie
Ciao
ho dimenticato una riga:
Dim c As Control
For i As Integer = Me.Controls.Count -1 To 0 Step -1
c = Me.Controls(i) 'riga mancante
GRAZIE!!!!!!
Ciao
e
BUON WEEK END LUNGO