Ho la seguente procedura in una classe:
Public Sub Converti_TextBox(ByRef Maschera As System.Windows.Forms.Form, _
ByRef Oggetto As System.Windows.Forms.TextBox)
' Toglie la textbox dai controlli della maschera
Maschera.Controls.Remove(Oggetto)
' Memorizza i dati della textbox, poi la converte e recupera i
' dati memorizzati
Oggetto = New Nuovo_Tipo
[codice in cui configuro le proprietà del nuovo tipo]
' Inserisce nuovamente l'oggetto nei controlli della maschera
Maschera.Controls.Add(Oggetto)
End Sub
Il problema che incontro è che nella maschera mi rimane l'oggetto invariato (Nuovo_Tipo è un tipo TextBox derivato). Se richiamo il .Dispose di Oggetto prima della New Nuovo_Tipo, cioé:
Oggetto.Dispose
Oggetto = New Nuovo_Tipo
nella maschera sparisce l'oggetto TextBox e non viene inserito quello nuovo.
Mi serve modificare il tipo dell'oggetto, mantenendo il riferimento di memoria, cioè il controllo che è stato passato nel parametro Oggetto alla fine deve puntare al nuovo oggetto creato con la tipologia Nuovo_Tipo.
Grazie.
---- MOFICA DEL 30-01-2014 ----
Errore stupido mio, trovato l'inghippo. Nella maschera c'è un SplitContainer e gli oggetti che passavo erano contenuti nei suoi pannelli, per questo motivo il problema stava nella rimozione dell'oggetto ed il suo reinserimento nella maschera, dato che non facevano parte dei suoi controlli, ma dei controlli dei pannelli dello SplitContainer.
Ho risolto creando una procedura ricorsiva che cerca l'oggetto all'interno di tutti i contenitori della maschera e lo rimuove, restituendo il contenuitore trovato. Dopo riassegno l'oggetto con il nuovo tipo allo stesso contenitore: