Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [VB2010 WinForm] dubbio su rimozione oggetti contenitore e contenuti

    ho una form che all'apertura aggiunge e disegna dinaminacamnte tutti i controlli da contenere (tramite codice).. consta di N. TabPages, in ogni TabPages ci sono N. TableLayoutPanel che a loro volta contengono N. button ognuna..

    faccio un esempio concreto di quello che contiente una TabPages:

    La TabPages1 è composta da 73 TableLayoutPanel di cui ognuna contiene dai 3 ai 9 button (numero variabile asseconda delle condizioni)..... e così via per le altre TabPages ..

    . il mio dubbio è : quando elimino una TabPages, tutti i controlli contenuti all'iterno di questa, vengono effettivamente rimossi dalla memoria..? oppure è necessario prima partire dai contenitori figli più interni (tramite metodo ricorsivo) ed eliminare uno ad uno tutti i controlli figlio fino ad arrivare al padre?

    è un dubbio che mi assale e non riesco ad aver conferme !

    grazie
    Michele

  2. #2
    Gli elementi interni di un controllo (cioè inseriti all'interno della collection Controls del controllo) dovrebbero eliminarsi da soli una volta eliminato il controllo.
    Chi non cerca trova.

  3. #3
    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!!!
    Michele

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.