Newsgroup: it.comp.lang.visual-basic
Titolo: Property Let

E' possibile passare un array come parametro di una Property Let?
Ho provato a metterlo ByRef, ma VB va in crash (!!!).
La sintassi e' la seguente (la Property Let e' in una form Frm1)
Property Let LetArray(ByRef Lista() as String)
...
...
End Property
<Chiamata della funzione>
...
dim Pippo(10) as String
..
<Procedura di riempimento di Pippo>
...
Frm1.LetArray=Pippo
Frm1.Show VbModal
Grazie a tutti
Bye by Massimo 8-]

 wrote in message 394889CB...@txt.it...


 Frm1.Show VbModal
Ammettiamo, per assurdo, che si possa fare. Credo che,
comunque, dovresti scrivere qualcosa del genere:
    Dim Pippo(10) As String
    Dim o         As Frm1
      Set o = New Frm1
      With o
        .LetArray = Pippo
      End With : Set o = Nothing
Venendo poi alla questione array non so se in vb6 e` possibile
ma nelle versioni 4 e 5 non lo e`, e mi spiego: una routine
del tipo di quella da te scritta:
    Property Let LetArray(ByRef Lista() as String)
        ...
    End Property
prevede comunque, anche se non la scrivi perche' vuoi che tale
proprieta` sia di sola scrittura, una proprieta` Get del tipo:
    Property Get LetArray() As ...
ecco! Cosa scriveresti al posto dei punti che ho messo dopo
"As"? Che tipo di dato? Array? Non mi risulta che esista.
Neanche a te, vero? PQM credo proprio che tu non possa fare
cio` che hai in mente. Dovrai, semmai, usare un Variant di
tipo Array.
Per esempio, cosi`:
' Modulo1.bas
'
Option Explicit
Sub Main( _
)
Dim i         As Integer
Dim pippo(10) As String
Dim frm1      As Form1
  For i = LBound(pippo) To UBound(pippo)
    pippo(i) = "Str" & i
  Next
  Set frm1 = New Form1
  With frm1
    .LetArray = CVar(pippo)
    .Show vbModal
  End With: Set frm1 = Nothing
End Sub
' Form1.frm
'
Option Explicit
Dim m_Lista() As String
Property Let LetArray( _
  Lista As Variant _
)
Dim i As Integer
  ReDim m_Lista(LBound(Lista) To UBound(Lista))
  For i = LBound(m_Lista) To UBound(m_Lista)
    m_Lista(i) = Lista(i)
    Debug.Print i, m_Lista(i)
  Next
End Property
--
Ciao.
Maurizio


Ho risolto il problema con un barbatrucco: ho scritto due funzioni in cui la
prima prende in oggetto un array di stringhe (purtroppo a me serviva per gli
array di stringhe, ma probabilmente si potrebbe modificare per gli array di tipo
generico) ed un separatore, e mi restituisce una stringa con i dati separati dal
'separatore, e la seconda effettua il percorso inverso: riceve in input una
stringa, un separatore ed un array ByRef, e riempie l'array.
Bye by Massimo 8-]

...


 End Property
E dov'e` l'"array come parametro di una Property Let" del
quesito? Io vedo solo *un elemento* dell'array. Ho capito
male?
--
Ciao.
Maurizio

Maurizio
Penso che tu abbia capito male, altrimenti spiegami perche'
a me funziona ??
Dim mLetArray(10) As String
Public Property Get LetArray(ByVal Index As Integer) As String
   LetArray = mLetArray(Index)
End Property
Public Property Let LetArray(ByVal Index As Integer, ByVal NewValue As
String)
   mLetArray(Index) = NewValue
End Property
Chiamata proprieta' in scrittura:
For i = 0 To 10
    Form1.LetArray(i) = Valore(i)
Next
Chiamata proprieta' in lettura:
For i = 0 To 10
    Valore(i) = Form1.LetArray(i)
Next
ecc. ecc.

 ecc. ecc.
Spero di non dover anche spiegare perche' funziona quell'"ecc.
ecc"!... ;-))
--
Ciao.
Maurizio

...


[...]
--
Ciao.
Maurizio

privandosi cosi' della possibilita` di migliorarsi. Quindi:
Grazie delle risate che hai stimolato;
vedo che l'arroganza e' proprio il tuo cavallo di battaglia,
come immaginavo prima ancora di rispondere.
Per caso sei un informatico puro? io no.
I miei ossequi
salclem

 I miei ossequi
E adesso cosa c'entra l'arroganza? Se ho offeso la tua
sensibilita` ti prego di scusarmi. La mia intenzione era di
darti conforto, dimostrando approvazione per il tuo
comportamento e concludendo con una battuta che voleva essere
simpatica. Evidentemente non sono riuscito nel mio intento e
mi dispiace molto.
Riguardo gli informatici puri ed impuri: non sei di quelli che
giudicano le persone in base a categorie, vero?
--
Ciao.
Maurizio