allora ho fatto una prova per il test ( ma non so se sia giusta):
ho creato tramite progettazione una piccola struttura simile a quella che viene creata dinamicamnete (prima citata).. poi ho avviato il programma, visualizzato la struttura (contenente una pagnia, una tablelayoutpanel e un bottone all'interno..)
poi ho stoppato l'esecuzione in debugmode e dalla finestra Immediata ho rimosso tutti i controlli della pagnina, così:
codice:
Pagina.Controls.clear
ho verificato visivamente e tutti i controlli vengono rimossi (pagina pulita) ed anche iterando con un ciclo i controlli della pagina, non esistono più:
codice:
For Each c As Control In Pagina.Controls
Stop ' se esiste un controllo ferma l'esecuzione
Next
però, cosa molto assurda, se richiamo tramite codice il bottone che dovrebbe essere stato rimosso, et voilàà che risultà ancora in piedi con tutte le proprietà settate...
codice:
?button7.Name
"Button7"
?Button7
{Text = "3° PIANO, ALA SX"}
AccessibilityObject: {ControlAccessibleObject: Owner = System.Windows.Forms.Button, Text: 3° PIANO, ALA SX}
AccessibleDefaultActionDescription: Nothing
AccessibleDescription: Nothing
AccessibleName: Nothing
AccessibleRole: Default {-1}
Adapter: {System.Windows.Forms.ButtonInternal.ButtonStandardAdapter}
AllowDrop: False
Anchor: Top Or Left {5}
AutoEllipsis: False
AutoScrollOffset: {X = 0 Y = 0}
AutoSize: False
AutoSizeMode: GrowOnly {1}
BackColor: "{Name=Control, ARGB=(255, 240, 240, 240)}"
BackColorBrush: 17825907
BackgroundImage: Nothing
BackgroundImageLayout: Tile {1}
BecomingActiveControl: False
BindingContext: Nothing
BindingContextInternal: Nothing
Bottom: 48
Bounds: {X = 5 Y = 5 Width = 259 Height = 43}
BufferPinkRect: Nothing
CachedImeMode: Disable {3}
CacheTextInternal: True
CanAccessProperties: True
CanEnableIme: False
CanFocus: False
CanRaiseEvents: True
CanRaiseEventsInternal: True
CanSelect: True
Capture: False
CaptureInternal: False
CausesValidation: True
CheckForIllegalCrossThreadCalls: True
ClientRectangle: {X = 0 Y = 0 Width = 259 Height = 43}
ClientSize: {Width = 259 Height = 43}
CompanyName: "Microsoft Corporation"
Container: Nothing
ContainsFocus: False
ContextMenu: Nothing
ContextMenuStrip: Nothing
ControlKeyboardRouting: Nothing
Controls: {System.Windows.Forms.Control.ControlCollection}
Created: True
CreateParams: {CreateParams {'BUTTON', '3° PIANO, ALA SX', 0x5601000b, 0x0, {5, 5, 259, 43}}}
CreateThreadId: 4668
currentHelpInfo: Nothing
CurrentImeContextMode: Inherit {-1}
Cursor: {[Cursor: Default]}
DataBindings: {System.Windows.Forms.ControlBindingsCollection}
DefaultBackColor: "{Name=Control, ARGB=(255, 240, 240, 240)}"
DefaultCursor: {[Cursor: Default]}
DefaultFont: {Name = Il riferimento a un membro non condiviso richiede un riferimento a un oggetto. Size=8.25}
DefaultForeColor: "{Name=ControlText, ARGB=(255, 0, 0, 0)}"
DefaultImeMode: Disable {3}
DefaultMargin: {Left=3,Top=3,Right=3,Bottom=3}
DefaultMaximumSize: {Width = 0 Height = 0}
DefaultMinimumSize: {Width = 0 Height = 0}
DefaultPadding: {Left=0,Top=0,Right=0,Bottom=0}
DefaultSize: {Width = 75 Height = 23}
DesignMode: False
DialogResult: None {0}
DisabledColor: "{Name=Control, ARGB=(255, 240, 240, 240)}"
DisableImeModeChangedCount: 0
DisplayRectangle: {X = 0 Y = 0 Width = 259 Height = 43}
Disposing: False
Dock: None {0}
DoubleBuffered: True
DownChangeRectangle: {X = 0 Y = 0 Width = 259 Height = 43}
Enabled: True
EventPaddingChanged: {Object}
Events: {System.ComponentModel.EventHandlerList}
FlatAppearance: {System.Windows.Forms.FlatButtonAppearance}
FlatStyle: Standard {2}
Focused: False
FocusTracing: Nothing
Font: {Name = Il riferimento a un membro non condiviso richiede un riferimento a un oggetto. Size=8.25}
FontHandle: -2130046483
FontHeight: 13
ForeColor: "{Name=ControlText, ARGB=(255, 0, 0, 0)}"
Handle: 3673242
HandleInternal: 3673242
HasChildren: False
HasMenu: False
Height: 43
HostedInWin32DialogManager: False
Image: Nothing
ImageAlign: MiddleCenter {32}
ImageIndex: -1
ImageKey: ""
ImageList: Nothing
ImeMode: Disable {3}
ImeMode (Control): Disable {3}
ImeModeBase: Disable {3}
ImeWmCharsToIgnore: 0
InternalHandle: 3673242
InvokeRequired: False
IsAccessible: False
IsActiveX: False
IsContainerControl: False
< Altro... (È stato visualizzato il primo 100 di 210 elementi.) >
e mo come mi spiego questa cosa???
il dubbio mi era salito prima : iterativamente il programma mi andava a creare oltre 10 pagine di TableLayoutPanel contenenti una marea di bottoni l'una... e notanto che la RAM usata, saliva un bel pò per poi rimanere sempre la stessa anche dopo la rimozione di tutti i controlli!!!