Newsgroup: it.comp.lang.visual-basic
Titolo: Classi e OCX

Sto implementando un'OCX che contiene alcune classi .Una di queste in
particolare "dovrebbe" creare uno nuovo oggetto "Shape" da uno presente
sullo UserControl.Ora il problema è semplice non "vedo" lo UserControl dalla
mia classe.Qualcuno sa suggerirmi qualche metodo per poterlo vedere che non
sia quello di passare lo UserControl alla mia classe tramite "Property Let"
??????
Grazie

, 
glar...@legoprint.com
 says...

non credo che ci siano altri modi. si tratta di due classi distinte, 
quindi per farle comunicare occorre un riferimento. mi sono già imbattuto 
nel tuo problema, e una smentita sarebbe bene accetta...
--
Gio_F - mailto:
jg...@tiscalinet.it

 ??????
mmmh,  mi sono perso, prova a darmi maggiori dettagli.
ciao

 di UserControl?
Adesso ti spiego! Semplicemente dal codice della mia classe con Ctrl+Space
non "vedo" l'oggetto UserControl; e l'unico modo che ho trovato per
farglielo "vedere" è richiamare nel codice dello UserControl 1 proprieta
della classe
dove : Classe.UCObj=Me però mi fa un po' shifo!! Ciao

 sia quello di passare lo UserControl alla mia classe tramite "Property
Let"
Ciao Enrico qualche settimana fa mi sono ritrovato con il tuo stesso
problema
e l'ho risolto aggiungendo al progetto un modulo "bas" con alcune variabili
globali che puntavano
agli oggetti contenuti nel UserControl a cui volevo accedere.
Praticamente più o meno in questo modo:
---------MODULO BAS--------
Global gcolOggetti As New Collection
-----------------------------
-----------UserControl1-----------------
Dim mintIdOggetto as Integer
Friend SubCreaOggettoFormaGeometrica(ByVal PosLeft As Single, ByVal PosTop
As Single, ByVal DimHeight As Single, ByVal DimWidth As Single) As Long
Dim NuovoOggetto As New OggettoFormaGeometrica
mintIdOggetto = mintIdOggetto + 1
Load shpFormaGeometrica(mintIdOggetto)
With shpFormaGeometrica(mintIdOggetto)
   .Left = PosLeft
   .Top = PosTop
   .Height = DimHeight
   .Width = DimWidth
   .Visible = True
End With
gcolOggetti.Add shpFormaGeometrica(mintIdOggetto), CStr(mintIdOggetto)
NuovoOggetto.SetID mintIdOggetto
End Sub
----------------------------------------------
E poi negli oggetti:
---------------Classe: "OggettoFormaGeometrica"-----------------
Dim mintID as Integer
Friend Sub SetID(ByVal intID As Integer)
mintID = intID
End Sub
Public Property Get Height() As Single
Dim obj As Shape
Set obj = gcolOggetti(CStr(mintID))
Height = obj.Height
End Property
Public Property Let Height(ByVal NewValue As Single)
Dim obj As Shape
Set obj = gcolOggetti(CStr(mintID))
obj.Height = NewValue
End Property
---------------------------------------------
Ovviamente ho anche creato delle classi d'insieme per gestire gli oggetti.
Purtroppo utilizzando più volte il mio controllo in un progetto mi sono
accorto che le variabili globali erano condivise fra tutte le istanze
dell'ocx in quel progetto, e questo come puoi immaginare causa non pochi
problemi (per ulteriori informazioni leggi i threads "[?] Creazione OCX
(OOP)"e "Oggetti propagati tra classi in una DLL ActiveX"). Quindi per
superare questo problema ora sto eliminando le variabili globali e le sto
trasformando in variabili private nel modulo dell'UserControl a cui accederò
tramite  routines dichiarate come Friend (per renderle invisibili
all'esterno) ovviamente per accedere al modulo dell'UserControl dagli altri
moduli di classi ora anch'io utilizzò una proprietà che faccia riferimento
all'UserControl che ha creato l'oggetto e ti suggerisco di nascondere tale
proprietà all'esterno dichiarandola come Friend.
Chissà magari nel tuo caso puoi usare le variabili globali, ma stai attento
a controllare il caso in cui venga utilizzato più di un ocx nello stesso
progetto.
Giusto per la cronaca l'esempio di codice che ti ho scritto è molto
semplificato in realtà l'ocx che sto creando è molto più complesso....
---------------
La sintassi per creare gli oggetti ("OggettoFormaGeometrica",
"OggettoTesto", "OggettoImmagine", "OggettoCampoDati") è:
UserControl.Oggetti.Add (tipoOggetto)
invece la sintassi per accedere ad una proprietà dell'oggetto è questa:
Dim CasellaDiTesto as OggettoTesto
set CasellaDiTesto = UserControl.Oggetti(IdOggetto)
CasellaDiTesto.Left = 1000
--------------
...sto creando un'OCX per il disegno di rettangoli, linee, immagini e testo
(impresa ardua in VB). Che verrà utilizzato in un programma di
parametrizzazione fatture.

 ha scritto nel messaggio
news:8favfk$kr8$1...@nslave2.tin.it...
