Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Uso del comando Me.Controls.Remove(pic)

11 views
Skip to first unread message

Vipers

unread,
May 29, 2009, 3:44:47 AM5/29/09
to
Ciao a tutti,

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

Luca D

unread,
May 29, 2009, 5:48:20 AM5/29/09
to
On 29 Mag, 09:44, "Vipers" <vip...@libero.it> wrote:
> Ciao a tutti,
>
> ho il seguente codice che genera delle picture box in una determina zona del
> form:
[...]

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

Vipers

unread,
May 29, 2009, 7:49:19 AM5/29/09
to
Intanto grazie mille per le dritte, per quanto riguarda il codice qui sotto,
non funziona in quanto "c" la considera inutilizzata nonostante ci sia
nell'if.

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


Luca D

unread,
May 29, 2009, 9:10:07 AM5/29/09
to
On 29 Mag, 13:49, "Vipers" <vip...@libero.it> wrote:
> Intanto grazie mille per le dritte, per quanto riguarda il codice qui sotto,
> non funziona in quanto "c" la considera inutilizzata nonostante ci sia
> nell'if.

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

Vipers

unread,
May 29, 2009, 9:32:33 AM5/29/09
to

"Luca D" <antan...@yahoo.it> ha scritto nel messaggio
news:2d8d05df-5bdf-45c8...@q16g2000yqg.googlegroups.com...

GRAZIE!!!!!!

Ciao
e
BUON WEEK END LUNGO


0 new messages