Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Capire cosa contiene una variabile Variant

Come faccio a capire se una variabile Variant contiene un form, un modulo, o
una stringa?
Mi serve perchč vorrei fare una funzione che, accettato come parametro di
ingresso un Variant (contenente un form, un modulo o una stringa),
restituisca una stringa costruita piů o meno in questo modo:
Se Parametro Form: "NomeForm|Form"
Se Parametro Modulo: "NomeModulo|Modulo"
Se Parametro Stringa: "ValoreDellaStringa|Stringa"
--
   .o0o.o0o.o0o.o0o.
   0    zMatteo    0
   .o0o.o0o.o0o.o0o.

 ha scritto nel messaggio
news:qakiIrrl...@DNS2.edpsistem.it...

Dim a As Variant
Set a = Form1
If TypeOf a Is Form Then
    MsgBox "a č una form"
End If


e se č un modulo? o una stringa? e poi da dentro la mia funzione mica faccio
la "Set a = Form1"..... scusa, ma hai letto il messaggio???


Supponiamo che mi sia spiegato male.... la mia funzione deve eser fatta (piů
o meno) cosě:
Private Function TypeOfSource(Source As Variant) As Long
' In base a Source la funzione restituisce:
'
' -1: Non identificato
'  0: Variabile standard (stringa, long, boolean.....)
'  1: Form
'  2: Modulo
'  3: Oggetto con proprietŕ Caption
'  4: Oggetto con proprietŕ Text
'  5: Altro Oggetto
'
  Select Case True
  Case Type Of Source Is Form TypeOfSource = 1
  ....
  ....
  ....
  ....
  End Select
End Function


L'arroganza non mi è mai piaciuta.....questo è il classico esempio
dell'intelletto che scema.
Di seguito ti riporto una parte della funzione come la farei io. Non è
completa ed è scritta al volo senza essere testata.
Quindi studiala e provala  prima di usarla che altrimenti mi rispondi ancora
una volta che non funziona!!!!
E ricordati che programmare non significa copiare ed incollare codice!!!!!
Ciao e buon lavoro.
Private Function TypeOfSource(Source As Variant) As Long
' In base a Source la funzione restituisce:
'
' -1: Non identificato
'  0: Variabile standard (stringa, long, boolean.....)
'  1: Form
'  2: Modulo
'  3: Oggetto con proprietà Caption
'  4: Oggetto con proprietà Text
'  5: Altro Oggetto
'
  If Source Is Nothing Then
    TypeOfSource = -1
    Exit Function
  End If
  If TypeOf Source Is Form Then
    TypeOfSource = 1
    Exit Function
  End If
  '2 qui devi però sapere come si chiama il modulo:
  If (TypeName(Source) = "NomeModulo") Then
    TypeOfSource = 2
    Exit Function
  End If
  If (TypeOf Source Is CheckBox) Or (TypeOf Source Is Label) Then  'elenchi
tutti gli ogegtti che vuoi che hanno proprietà caption
    '3
    TypeOfSource = 3
    Exit Function
  End If
  If (TypeOf Source Is TextBox) Then 'Or (TypeOf Source Is
oggettoconproprietàTEXT) Then  'elenchi tutti gli ogegtti che vuoi che hanno
proprietà .TEXT
    '4
    TypeOfSource = 4
    Exit Function
  End If
  If TypeOf Source Is Object  Then
            '5
        TypeOfSource = 5
        Exit Function
  Else
            '0
    TypeOfSource = 0
    Exit Function
  End If
End Function
Private Sub Form_Load()
    Dim a As Variant
    Set a = Form1 'oppure settala a quel che vuoi....QUESTO è SOLO UN
ESEMPIO!!!!!!
    Call TypeOfSource(a)
End Sub

 o meno) cosě:
CUT
Ma le seghe te le fai da solo o ti aiuta qualche parente ...
prima di plonkarti aspetto una risposta tua (ripeto : "tua" .. non andare a
copiarla da qualcuno).
Popi mi dovrai spiegare come fai a caricare un modulo standard in un variant
.. mica volevi dire "un modulo di classe" vero ?


Ecco la funzione. L'unico problema resta legato al passaggio di un modulo
alla funzione: vb mi dice che non posso pasare come parametro un modulo.
Riguardo il resto ti rimando alla fine di questo messaggio.
Private Function TypeOfSource(Source As Variant) As Long
' In base a Source la funzione restituisce:
'
' -1: Non identificato
'  0: Variabile standard (stringa, long, boolean.....)
'  1: Form
'  2: Modulo ............. non è possibile passare un modulo come
parametro!!!
'  3: Oggetto con proprietà Caption
'  4: Oggetto con proprietà Text
'  5: Altro Oggetto
'
  Dim Dummy As String
 '--- errori ---
  On Error Resume Next
  Dummy = Source
  If Err Then
    If Source Is Nothing Then
      TypeOfSource = -1
      Exit Function
    End If
  Else
    If IsEmpty(Source) Or IsMissing(Source) Or IsNull(Source) Then
      TypeOfSource = -1
      Exit Function
    End If
  End If
  On Error GoTo 0
 '--- ogegtti form ---
  If TypeOf Source Is Form Then
    TypeOfSource = 1
    Exit Function
  End If
 '--- ogegtti moduli ---
  '2 qui devi però sapere come si chiama il modulo:
  If (TypeName(Source) = "NomeModulo") Then
    TypeOfSource = 2
    Exit Function
  End If
 '--- ogegtti con proprietà .Caption ---
  On Error Resume Next
  Dummy = Source.Caption
  If Err = 0 Then
    TypeOfSource = 3
    Exit Function
  End If
  On Error GoTo 0
  '--- ogegtti con proprietà .Text ---
  On Error Resume Next
  Dummy = Source.Text
  If Err = 0 Then
    TypeOfSource = 4
    Exit Function
  End If
  On Error GoTo 0
  '--- altri ogegtti ---
  If TypeOf Source Is Object  Then
    TypeOfSource = 5
    Exit Function
  Else
  '--- variabili o costanti ---
    TypeOfSource = 0
    Exit Function
  End If
End Function
PS Premetto che non era sicuramente mia intenzione far arrabbiare qualcuno e
che, rileggendo il mio messaggio, potevano essere fraintesi i  toni.
Però anche la tua risposta era un po' poco comprensibile....
Riguardo al resto della tua risposta penso solo che tu non possa sapere chi
sono o come programmo semplicemente da una risposta.
Comunque grazie e buon lavoro anche a te!

 Comunque grazie e buon lavoro anche a te!
Non voglio intavolare l'ennesima discussione...anche perchè non ho nè voglia
nè tempo di farlo....
Pace  e amore e finita qua!
Byez


Sono d'accordo!!

 Se Parametro Stringa: "ValoreDellaStringa|Stringa"
Bastano 3 righe, ma noi lo facciamo in 7 :)
Function VariantToString(Byval Var as Variant) As String
    if (IsObject(Var)) Then
        VariantToString = TypeName(Var) & "|" & Var.Name
    Else
        VariantToString = TypeName(Var)
    End if
End function
Ciao
--
using System.Gtk.Forms = "
http://www.neodatatype.net/windowsforms/sgf.aspx
"
mathParser = "
http://www.neodatatype.net
"
sitoComune = "
http://www.it-lang-vb.net
"