Newsgroup: it.comp.lang.visual-basic
Titolo: Opt.valore

Non riesco a prendere il valore di un option button (optProvenienza) e
passarlo ad una Sub che
a sua volta mi salva il profilo sul disco.
Ho una funzione Aggiungi che uso per aggiungere nuovi contatti alla classe
di insieme Impiegati,
ma non riesco a passargli il valore di questo dannato option  botton.
OptProvenienza è una matrice di controllo e l'indice può essere 0 - 1. Il
codice che ho scritto
e che per tutte le altre voci funziona egregiamente è il seguente:
_______________________________________________________________-
        'Aggiunge dati all'insieme e al file
mImpiegati.Aggiungi txtCognome.Text, txtNome.Text, txtIndirizzo.Text, _
        txtCittà.Text, txtProvincia.Text, txtCAP.Text, txtTelefono.Text, _
        txtEmail.Text, txtMatricola.Text, txtCellulare.Text,
txtAssunzione.Text, _
        txtDataNascita.Text, CStr(cboSesso.ListIndex),
CStr(optProvenienza(Index)), _
        CStr(cboQualifica.ListIndex), strChiave
________________________________________________________________
La Sub Aggiungi nella classe CImpiegati è questa
Public Sub Aggiungi(ByVal strCognome As String, _
                    ByVal strNome As String, _
                    ByVal strIndirizzo As String, _
                    ByVal strCittà As String, _
                    ByVal strProvincia As String, _
                    ByVal strCAP As String, _
                    ByVal strTelefono As String, _
                    ByVal strEmail As String, _
                    ByVal strMatricola As String, _
                    ByVal strCellulare As String, _
                    ByVal strDataAssunzione As String, _
                    ByVal strDataNascita As String, _
                    ByVal strSesso As String, _
                    ByVal strProvenienza As String, _
                    ByVal strQualifica As String, _
                    ByVal strCodiceImpiegato As String)
'Aggiunge un membro all'insieme
Dim NuovoImpiegato As New CImpiegato
With NuovoImpiegato
    .CodiceImpiegato = Trim(strCodiceImpiegato)
    .Cognome = strCognome
    .Nome = strNome
    .Indirizzo = strIndirizzo
    .Città = strCittà
    .Provincia = strProvincia
    .CAP = strCAP
    .Telefono = strTelefono
    .Email = strEmail
    .Matricola = strMatricola
    .Cellulare = strCellulare
    .DataAssunzione = strDataAssunzione
    .DataNascita = strDataNascita
    .Sesso = strSesso
    .Provenienza = strProvenienza   <---------------
    .Qualifica = strQualifica
    mImpiegati.Add NuovoImpiegato, .CodiceImpiegato
    'Scrive il nuovo record sul disco
    If mblnInizCompleta Then ' non scrive durante l'inizializzazione
        ImpostaRecord (.CodiceImpiegato)
        mudtImpiegato.strCodiceElimina = "A"
        ScriviRecord .CodiceImpiegato
        mstrChiaveMaggiore = .CodiceImpiegato
    End If
End With
End Sub
_________________________________________________
La Get e la Let nella classe CImpiegato è invece questa
_________________________________________________
Public Property Get Provenienza() As String
Provenienza = mstrProvenienza
End Property
Public Property Let Provenienza(ByVal strProvenienza As String)
mstrProvenienza = strProvenienza
End Property
_________________________________________________
Dove sbaglio?
Debby

 ma non riesco a passargli il valore di questo dannato option  botton.
Ma un OptionButton può essere Vero o Falso.
Invece a te serve una Stringa, visto che il parametro della tua function è
string.
Non ti viene il dubbio che avvengano una serie di conversioni implicite che
possono incasinare?
Oltretutto, attenta che il CStr di un booleano è la cosa più localizzata che
esista...
Ciao
Alberto

 esista...
Cioè?
Debby  _-_-_-)@

 Si lo so e pensavo che tramutasse in 1 e 0...
Se non sei sicura di una cosa, metti un breakpoint e guardaci, anzichè
andare avanti a testa bassa.
Comunque, il .Value di un OptionButton è di tipo booleano.
Tu richiedi che venga passata alla funzione una cosa di tipo Stringa.
Ogni volta che c'è un conflitto di tipi, VB (che è troppo buono, perchè se
ti desse errore già in compilazione tu avresti già capito tutto) effettua
una conversione implicita.
Nel caso specifico, visto che deve ottenere una stringa, effettua un
CStr(OptionButton.Value).
Se fai questa cosa, vedrai che la stringa risultante è "VERO" o "FALSO", ma
può essere anche "TRUE" o "FALSE", o anche in altre lingue. Insomma, dipende
dal sistema operativo e dalla localizzazione.
Se il tuo risultato deve andare in un file di testo, hai due possibilità: o
ti affidi a funzioni localizzate, o a funzioni assolutamente delocalizzate.
Caso 1: usi il CStr per passare da booleano a stringa e il CBool per passare
da stringa a booleano (in lettura). Questo va bene finchè le impostazioni
del sistema operativo in lettura e in scrittura sono identiche. Passando il
file da un pc ad un altro potrebbe non funzionare più niente.
Caso 2: usi una qualsiasi formattazione tua, indipendente dalle impostazioni
internazionali. Ad esempio, puoi usare un semplice If che ti restituisca "T"
o "F" a seconda del valore booleano, e viceversa testando il testo letto
imposti il .Value dell'OptionButton.
A seguire, ci possono essere molti altri punti del tuo codice che non vanno,
ma non hai chiarito che problemi trovi, ossia se hai errori, in che casi ti
sballano (e come) le scelte dell'utente, ecc..., per cui non so dirti niente
di più.
Ciao
Alberto


Che senso ha impostare optProvenienza(n) se già sai che è True?
Inoltre basta impostare quello a True che gli altri diventano
automaticamente False, quindi è inutile tutto questo.
Ciao

 Che senso ha impostare optProvenienza(n) se gią sai che č True?
Effettivamente con questo esempio non serve visto che gli opt sono due ma in
un area del profilo
per esempio ce ne sono 4 raggruppati ( in pratica sono le 4 qualifiche
possibili che un utente puņ avere).
Avevo optato per una matrice di option button per scrivere meno codice o per
lo meno cosi la testolina
mi ha guidata ma mi sa di aver fatto come cappuccetto rosso e ho intrapreso
la strada sbagliata....
Torno indietro e ricomincio =)
Debby

 di piů.
Piů che altro ho notato che appena cambi una virgola dentro una classe di
insieme si scombina tutto
Cmq ora che sono sicura di intraprendere le strada giusta, il rischio di
smantellare e ricostruire tutto
vale la candela, anche perche se no non vado avanti.
Debby
PS
Grazie Alberto e Grazie Zanna

 la strada sbagliata....
Togli le assegnazioni a False :)
Ciao

 Togli le assegnazioni a False :)
Ho fatto, ho modificato la proprietà di Provenienza in boleana, per
l'esattezza ho eliminato la matrice di controllo del option button e ho
rinominato i due bottoni in:
optProvReparto1
optProvReparto2
 ho modificato tutti i parametri e le varie chiamate ma non riesco a capire
perchè
non esce fuori la proprietà Value dei bottoni in questione. Le proprietà che
ho a disposizione sono solo [Count, Item, LBound, UBound].
Come faccio a passare il valore [ Vero, Falso] alla routine Aggiungi, visto
che mi da errore mettendo [value] dopo il punto?
Questa è la chiamata della routine AGGIUNGI
_____________________________________________________
mImpiegati.Aggiungi txtCognome.Text, txtNome.Text, txtIndirizzo.Text, _
        txtCittà.Text, txtProvincia.Text, txtCAP.Text, txtTelefono.Text, _
        txtEmail.Text, txtMatricola.Text, txtCellulare.Text,
txtAssunzione.Text, _
        txtDataNascita.Text, CStr(cboSesso.ListIndex),
optProvReparto1.value, _
        optProvReparto2.value, (cboQualifica.ListIndex), strChiave
questa è la routine AGGIUNGI
_____________________________________________________-
Public Sub Aggiungi(ByVal strCognome As String, _
                    ByVal strNome As String, _
                    ByVal strIndirizzo As String, _
                    ByVal strCittà As String, _
                    ByVal strProvincia As String, _
                    ByVal strCAP As String, _
                    ByVal strTelefono As String, _
                    ByVal strEmail As String, _
                    ByVal strMatricola As String, _
                    ByVal strCellulare As String, _
                    ByVal strDataAssunzione As String, _
                    ByVal strDataNascita As String, _
                    ByVal strSesso As String, _
                    ByVal blnProvReparto1 As Boolean, _
                    ByVal blnProvReparto2 As Boolean, _
                    ByVal strQualifica As String, _
                    ByVal strCodiceImpiegato As String)
'Aggiunge un membro all'insieme
Dim NuovoImpiegato As New CImpiegato
With NuovoImpiegato
    .CodiceImpiegato = Trim(strCodiceImpiegato)
    .Cognome = strCognome
[cut]
    .ProvReparto1 = blnProvReparto1 <------
    .ProvReparto2 = blnProvReparto2 <------
    .Qualifica = strQualifica
[cut]
Queste sono le Property che ho scritto nella Classe CImpiegato
________________________________________________
Public Property Get ProvReparto1 () As Boolean
    ProvReparto1  = mblnProvReparto1
End Property
Public Property Let ProvReparto1 (ByVal blnProvReparto1  As Boolean)
     mblnProvReparto1  = blnProvReparto1
End Property
Public Property Get ProvReparto2 () As Boolean
    ProvReparto2 = mblnProvReparto2
End Property
Public Property Let ProvReparto2 (ByVal blnProvReparto2  As Boolean)
     mblnProvReparto2  = blnProvReparto2
End Property
_______________________________________________
Dimenticavo!!!! Ragazziiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii buon week end e
buona notte (vista l'ora)!!!!!!!!!!
Smack,Smack,Smack,Smack,Smack,Smack,Smack,
Smack,Smack,Smack,Smack,Smack,Smack,Smack,
Smack,Smack,Smack,Smack,Smack,Smack,Smack,
Smack,Smack,Smack,Smack,Smack,Smack,Smack,
Smack,Smack,Smack,Smack,Smack,Smack,Smack,
Smack,Smack,Smack,Smack,Smack,Smack,Smack,
Deborah!!! -----)@

                     ByVal strCodiceImpiegato As String)
Complimenti per l'indentazione. :)
Personalmente odio funzioni di questo tipo.
E' assurdo avere funzioni che richiedano più i 4 o 5 parametri.
Alcuni miei colleghi ne hanno fatte alcune con 20 o 30 parametri, magari
quasi tutti opzionali... c'è da impazzire nel capire quali combinazioni di
parametri funziona e come, senza contare la chiarezza nella lettura quando
hai chiamate del tipo
Call ModificaArticolo("AX10", , , 45, , "R2", axRipeti, _
                      , , lngAngolo, strCodice, , dblValore, _
                      , , , , dtData)
Sfido chiunque a capire quali sono i parametri valorizzati, ma la cosa non
cambia se i valori sono tutti necessari, anzi.
Non avevi una classe Impiegato?
Passagli quella, non i singoli valori!
Ciao
--
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 Passagli quella, non i singoli valori!
Ci ho Cimpiegato e CImpiegati dove l'ultima è un insieme.
Come faccio a passargli la classe Impiegato senza passargli i singoli
valori?
Debby

 valori?
Public Function MiaFunzione(Byval Impiegato As CImpiegato)
    ' ...
End Function


 End Function
Wow..... sono senza parole!!! Ancora non ci ho provato ma è proprio una
bella dritta!!! =))))))
Debby!

 bella dritta!!! =))))))
Una mandrakata ;)


 End Function
Mi sembrava troppo facile e che avessi capito subito!! =))
Se scrivo Public Function (ByVal Impiegato as Cimpiegato) do per scontato
che i valori delle proprietà
siano già stati scritti mentre invece non è cosi. Quindi non posso fare come
dici tu no!
Debby!

 dici tu no!
E allora come facevi con la funzione di prima?
Il concetto non cambia.
Ciao