Newsgroup: it.comp.lang.visual-basic
Titolo: UserConrtol: come ca##o li salvo i parametri?

Eccomi alle prese con un'OCX fatto in visual basic, tanto per fare un
po' pratica, in generale mi funziona tutto, ma alcuni dei parametri
vanno regolarmente persi :\
Credo soprattutto di non aver capito cosa siano il PropertyBag e
l'Extender...
La cosa che mi stranisce č che alcuni parametri vengono salvati, in
pratica tutti quelli che poi dentro il mio controllo io assegno ad un
Label (BackColor ad esempio...) 
Al contrario il valore di una prorietą "Value" del tutto personale
viene regolarmente persa :\
Allego un po' di codice sperando che possiate aiutarmi ^__^'
Option Explicit
Private dblValue As Double
Private Sub UserControl_InitProperties()
    Value = Extender.Value
    BackColor = Extender.BackColor
End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
    PropBag.ReadProperty "Value", Extender.Value
    PropBag.ReadProperty "BackColor", Extender.BackColor
End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
    PropBag.WriteProperty "Value", Value, Extender.Value
    PropBag.WriteProperty "BackColor", BackColor, Extender.BackColor
End Sub
Public Property Get Value() As Double
    Value = dblValue
End Property
Public Property Let Value(ByVal vNewValue As Double)
    dblValue = vNewValue
    PropertyChanged "Value"
End Property
Public Property Get BackColor() As Long
    BackColor = lblRiempimento.BackColor
End Property
Public Property Let BackColor(ByVal NewColor As Long)
    lblRiempimento.BackColor = NewColor
    PropertyChanged "BackColor"
End Property
Dove sto sbagliando?
-- 
Giovanni "Gyo" Perdicaro
E-Mail: 
gperd...@sicilyonline.it

l'Extender...
E allora perchè li usi? :P
Ho visto sulla guida perchè
non sapevo cosa fossero...
Oggetto Extender
Oggetto che contiene le
proprietà del controllo. Le proprietà vengono in questo caso controllate
dal contenitore del controllo anziché dal controllo stesso.
Ma a che
serve questa cosa?
Saluti...
--------------------------------
Inviato via 
http://usenet.iol.it
 

dal contenitore del controllo anziché dal controllo stesso.
Se quello che ho capito è giusto Extender mi permette di leggere da
"dentro" il controllo (chiamiamolo MyCtrl) le impostazioni che
l'utente gli assegnerà in fase di progettazione e di esecuzione,
ovvero le proprietà che saranno poi salvate nel file .frm
E' per questo che negli eventi UserControl_ReadProperties e
UserControl_WriteProperties eseguo le scritture e letture da e su
questo oggetto. E qui entra in gioco il PropertyBag...
Intanto ho scoperto un'errore nel mio codice... almeno sintattico, la
userconrtol dev'essere così:
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
    Value = PropBag.ReadProperty("Value", Extender.Value)
    BackColor = PropBag.ReadProperty("BackColor", Extender.BackColor)
End Sub


 End Sub
[SNIP]
Piu' che non salvare nulla mi stupisce che non ti dia errore: Extender.Value
non esiste!
l'oggetto Extender puo' essere visto come il contenitore che riceve
l'istanza del tuo controllo e che fornisce allo stesso alcune proprieta' di
default come ad esempio Top, Left, il nome predefinito (es. "Label1") e
altro, ma non e' sicuramente il posto dove salvare le tue property...
Se guardi bene la sintassi di ReadProperty/WriteProperty vedrai che l'ultimo
parametro e' il valore di default per la proprieta', il fatto che sia stato
usato Extender.BackColor in relazione a "BackColor" vuole semplicemente
indicare che per default del controllo sara' uguale a quello del suo
contenitore, ma nel caso di Value non significa nulla, anzi come dicevo
dovrebbe darti un bel "Proprietà o metodo non supportato dall'oggetto"
C'e' anche un problema nella funzione di lettura dato che il valore
restituito da ReadProperty non viene assegnato a nessuna variabile... in
sostanza dovresti correggere piu' o meno cosi':
Option Explicit
Private dblValue As Double
'un valore di default per la prop. Value, non e' obbligatorio...
Private Const DEFAULT_VALUE = "3.14"
Private Sub UserControl_InitProperties()
    Value = DEFAULT_VALUE
    BackColor = Extender.BackColor
End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
    Value = PropBag.ReadProperty "Value", DEFAULT_VALUE
    BackColor = PropBag.ReadProperty "BackColor", Extender.BackColor
End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
    PropBag.WriteProperty "Value", Value, DEFAULT_VALUE
    PropBag.WriteProperty "BackColor", BackColor, Extender.BackColor
End Sub
ecc..
Ciao
--
Luca Dormio
luca....@tin.it

parametro e' il valore di default per la proprieta',
[StraCut]
Avevo anche provato con un valore predefinito prima di usare
Extender.Value, ma non mi funzionava... ovviamente era per colpa
dell'errore nell'evento UserControl_ReadProperties ^__^
Potevo impazzire...
Ora stavo provando a inserire una proprietà Font, sempre seguendo i
tutorial M$, quindi creazione di un'oggetto StdFont con WithEvents e
relativa proprietà...
Però quando assegno un font al mio controllo (in modalità ogetto) mi
risponde un "Numero errato di argomenti o assegnazione di proprietà
non valida".
