Gestione controlli su Form

di il
10 risposte

Gestione controlli su Form

Ciao ragazzi,
ho un problema con dei controlli aggiunti nel form dinamicamente da codice.

Nello specifico dal form1 cliccando su un pulsante apro form2 con il comando
"frmDettCamp.ShowDialog()"

Una volta visualizzato questo form cliccando su un pulsante aggiungo delle label utilizzando il comando
"Me.Controls.Add(GenLab(index))"
dove GenLab è un array di oggetti label.

Fin qui funziona tutto perfettamente.

Quando chiudo form2 all'evento Closed rimuovo tutte le label aggiunte con il comando
Me.Controls.Remove(GenLab(index))
e ritorno qundi al form1.

Se a questo punto da form1 clicco nuovamente sul pulsante per aprire form2 e clicco sul pulsante che dovrebbe aggiungermi le label dinamicamente le label vengo create e aggiunte al form(ho verificato sotto debug) ma non vengono visualizzate .

Qualcuno di voi ha idea del perchè si comporta così?

Grazie.

Alberto

10 Risposte

  • Re: Gestione controlli su Form

    Ma quale posizione indichi quando crei le label?
  • Re: Gestione controlli su Form

    Gestisco la posizione con 2 variabili x e y
     
     GenLab(i6) = New Label
                GenLab(i6).Name = String.Format("DettGioCamp{0}", i6)
                GenLab(i6).Width = 800
                GenLab(i6).Height = 20
                GenLab(i6).Top = x
                GenLab(i6).Left = y
                GenLab(i6).Visible = True
                GenLab(i6).Text = "Testo"
                GenLab(i6).Font = New Drawing.Font("Arial", 11, FontStyle.Bold)
                Me.Controls.Add(GenLab(i6))
    
    e la variabile x parte sempre dal valore 420 sia al primo cha al secondo ciclo con incremento di 40 ad ogni iterazione
  • Re: Gestione controlli su Form

    Non si possono determinare le cause così ... bisogna provare il programma ... se puoi postare un link da cui scaricarlo e provarlo ...
  • Re: Gestione controlli su Form

    Devo sistemare il codice perchè va a pescare i dati da un db SQL e quindi immagino sarebbe impossibile per te testarlo...lo adatto in modo da lasciare il minimo indispensabile per ricreare e verificare questo problema.
    Grazie Oregon
  • Re: Gestione controlli su Form

    Certo, se riesci a scrivere un progetto di test più semplice che ha lo stesso comportamento, è meglio.
  • Re: Gestione controlli su Form

    Alberto75 ha scritto:


    Quando chiudo form2 all'evento Closed rimuovo tutte le label aggiunte con il comando
    Me.Controls.Remove(GenLab(index))
    e ritorno qundi al form1.
    Come chiudi il Form2 ??
    Non basta chiuderlo con Close(), devi usare Dispose()

    La procedura corretta dovrebbe essere questa, evitando cioè di usare l'istanza predefinita delle form, e fare un Dispose() alla sua chiusura:
    Dim frm = New frmDettCamp
    frm.ShowDialog(Me)
    frm.Dispose()
  • Re: Gestione controlli su Form

    SirJo ha scritto:


    La procedura corretta dovrebbe essere questa, evitando cioè di usare l'istanza predefinita delle form, e fare un Dispose() alla sua chiusura:
    Dim frm = New frmDettCamp
    frm.ShowDialog(Me)
    frm.Dispose()
    Per essere perfetti al 100%, la chiamata dovrebbe essere "protetta" con il costrutto Try...Finally:
    
    Dim frm = New frmDettCamp
    Try
        frm.ShowDialog()
    Finally
        frm.Dispose()
    End Try
    
    o in alternativa, sintetizzando
    
    Using frm As New frmDettCamp
        frm.ShowDialog()
    End Using
    
    Questo garantisce che qualsiasi eccezione possa verificarsi nella chiamata al metodo ShowDialog(), la "risorsa Form" venga comunque rilasciata, che ci sia bel tempo, che piove o che nevichi.

    Ciao!
  • Re: Gestione controlli su Form

    Con Dispose funziona alla grande.

    Ho pure inserito il tutto in un Try...Finally per sicurezza come suggerito.

    Grazie mille del prezioso aiuto.

    Ciò sbattuto la testa per mezza giornata a forza di fare prove e non ho risolto nulla..voi in 10 minuti mi avete risolto il problema.

    Grazie infinite.

    Alberto
  • Re: Gestione controlli su Form

    Alberto75 ha scritto:


    Ciò sbattuto la testa per mezza giornata a forza di fare prove e non ho risolto nulla..voi in 10 minuti mi avete risolto il problema.
    mezza giornata beato te

    quando vedo che con una riga di codice risolvono il problema mi vengono quasi gli attacchi di panico al pensiero che ogni cosa che imparo apre "nuovi universi".
  • Re: Gestione controlli su Form

    Da una parte siete fonte di ispirazione... ma dall'altra fonte di sconforto.
Devi accedere o registrarti per scrivere nel forum
10 risposte