Newsgroup: it.comp.appl.access
Titolo: Function Private o Public?

Sono abituato a dichiarare le funzioni pubbliche in un modulo a parte  e mai
all'interno del codice legato ad un form.
Se dovessi dichiarare come pubblica una funzione di un form (che non
richiami ovviamente campi legati al form stesso) posso richiamarla
normalmente come se fosse dichiarata in un modulo, vero?
Questa prassi, però (a parte il vantaggio di usare me.nomecampo per
riferirsi direttamente ai campi) non porta ad avere una certa confusione nel
codice?
Grazie per il suggerimento.

 ha scritto nel messaggio 
news:IeCme.1462819$35.54...@news4.tin.it...

Ciao,
in un form non puoi dichiarare/definire una funzione pubblica in quanto 
l'area di visibilità è limitata al form stesso...se un'altro form va in 
memoria non riesce a vedere quella funzione o quelle variabili..cmq se provi 
te ne accorgi da te!
Buona giornata
Gaspare 

 te ne accorgi da te!
Grazie.
Ciao.

 ha scritto nel messaggio 
news:0jCme.1462852$35.54...@news4.tin.it...

De nada -> buona giornata :-) 

 ha scritto nel messaggio 
news:IeCme.1462819$35.54...@news4.tin.it...

In ogni caso per quanto riguarda il vb si può solo parlare di 
"dichiarazione/definzione" di funzione in quanto quando la dichiari 
contemporaneamente la implementi...tranne che nei casi di chiamata alle API 
in cui c'è il termine DECLARE ...ed infatti in quel caso quando viene fatta 
la chiamata a qulle funzioni si "fa un salt"o alla function implementata 
all'inerno della libreria per poi ritornare all'interno del codice vb... 

 normalmente come se fosse dichiarata in un modulo, vero?
Solo se la form è aperta. Cioè non puoi chiamare la funzione
frmMain.MiaFunzione quando frmMain è chiuso.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Ciao,
fammi una cortesia...con alimentare il discorso con Roberto altrimenti non 
la finiamo pių :-)
Buona giornata
Gaspare 

 ha scritto nel messaggio
news:9iCme.960997$b5.41...@news3.tin.it...

ERRATA CORRIGE.
Facciamo luce sulla questione.
In una Form(che altro non è che un Modulo di Classe) puoi dichiarare
una Funzione/Sub(Metodi della Classe) come Public, in questo modo
se la Form è aperta possono essere usati decisamente dall'esterno.
Ricordo che una Classe(Form inclusa) può definire anche Proprietà
Public attraverso Public Property Get/Let/Set sempre accessibili
dall'esterno.
Se però non ho capito male, quì il punto è un'altro.
Il codice scritto in una Form se viene esportato in un Modulo DEVE essere
generalizzato in modo coerente con l'azione da fare.
Mi spiego meglio, in una Form si possono fare riferimenti espliciti ad
Oggetti
della Form Stessa(Controlli), a questo punto la semplice esportazione è
inutile e oltretutto può creare solo problemi.
Quando è utile invece scrivere del CODICE Public in un Modulo..?
In tutte quelle occasioni in cui la Funzione/Sub può essere generalizzata
rendendola indipendente da chi la chiama in modo da renderla
fruibile da tutti gli oggetti, tutti gli altri casi sono da EVITARE.
Questo diventa tanto più immediato quanta più esperienza ha chi programma
e tanta più lungimiranza e ottica di ottimizzazione è riuscito ad acquisire.
Saluti
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

 ha scritto nel messaggio
news:ZnCme.961027$b5.41...@news3.tin.it...

Oggi non è il tuo giorno...!
Implementare non è assolutamente da confondere con la
Dichiarazione/Definizione.
L'implementazione nel linguaggio ad Oggetti ha a che vedere con
l'Ereditarietà
nel campo delle Classi.
Puoi cercare "Istruzione Implements" da pochi usata, almeno in VBA
Ciao


[CUT]
Non entreremo in polemica pure noi? ;-)
Quello che intendevo dire (scusa la mia distorsione...) è che in altri 
linguaggi come il C prima devi dichiarare una funzione e solo dopo definirla 
(costruirla ..implementarla...un modo per  dire scrivere il codice della 
funzione stessa) altrimenti si commette in errore...
In vb dichiari e definisci una funzione nello stesso tempo-...
Per il fatto del form ho solo capito (avrò capito male evidentemente...) se 
era possibile parlare di funzione pubblica: solo quello! Ed ovviamente ho 
riposto di no in quanto si possono solo "costruire e richiamare" funzione 
private...invece...siccome quando lanci un applicativo indipendentemente dal 
form apero i moduli vanno in memoria in essi è possibile "costruire" delle 
funzioni di tipo "public" richiamabili dai fari form...

 funzioni di tipo "public" richiamabili dai fari form...
Non è chiaro quanto hai capito o quanto dici.
In una Form puoi dichiarare una Public Function all'interno.
Quindi da un'altra Form vedi la Funzione come un Metodo Esposto
in quanto Public.
'------------------------------------------------------
Codice nella FORM1:
Public Function Prova()
    Msgbox "PROVA"
End Function
'------------------------------------------------------
Chiamata dalla FORM2 con FORM1 Aperta:
Call Forms!Form1.Prova
Vedrai che esce il MsgBox.
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------


Bene e a questo punto ti chiedo: che senso ha? Tanto vale farlo in un modulo 
e stai "più" tranquillo... 

[CUT]
Ti faccio 1 esempio banalissimo
int sommma (int val1, int val2);
questa per me è una dichiarazione...
int somma (int val1, int val2)
{
int val;
val=val1+val2;
return(val);
}
questa è una definizione...o implementzione della funzione di cui 
sopra...non sò se sono stato chiaro

 e stai "più" tranquillo...
Lo stesso senso che può avere dichiarare un Metodo Public in una Classe
perchè dovresti stare più tranquillo...!!!!
Ti faccio un esempio banale:
Access non può istanziare OCX come fà VB senza un'interfaccia Grafica(Form)
in pratica non puoi istanziare un OCX in una Classe.
Per questo si usa una Classe Speciale(la FORM) per fare quanto VBA non ti
consente.
A questo punto la tua Form è una Classe vera e propria che istanzia un OCX,
supporta
la MultiIStanza e non c'è nemmeno bisogno che sia VISIBILE...!!
L'esempio più semplice è usando WinSock, o spantegani un'istanza di OCX
in ogni Form scrivento quintali di Codice oppure crei una Classe(Form) che
opportunamente strutturata faccia il lavoro sporco.
Dai un'occhiata al MailSender.
Ovvio che ti ho fatto un esempio abbastanza semplice, ma intuitivo, ma
potremo
parlare di queste cose per molte altre circostanze.
Non dimenticare che una Form è ASSOLUTAMENTE una Classe molto potente con
interfaccia Grafica, non vorrai usarla solo per il concetto primitivo e
limitato che
ti insegnano i Manuali....!!!!!!


 ha scritto nel messaggio 
news:d7f105$oko$1...@domitilla.aioe.org...

E' meno male che hai dormito 2 ore  ...spero di non incontrarti mai 
"sveglio" ;-) 

 -----------------------------------------------------------
Me ne guarderei bene...anche perchč lo zio Bill con il nuovo 
vs.net
 neanche 
lo permette piů! 

 e stai "più" tranquillo...
L'errore che nasce se il form è chiuso è intercettabile, e lo posso
utilizzare come verifica.
On Error Goto ErrRoutine
    [....]
    Call Form1!MiaSub
    [....]
ExitRoutine:
    Exit Sub
ErrRoutine:
    If Err.Number = 'errore di maschera chiusa' Then
        MsgBox "La maschera è chiusa"
        Resume Next
    Else
        MsgBox Err.Number & " " & Err.Description
        Resume ExitRoutine
    End If
Inoltre, a seconda del tipo di funzione, potrei aver bisogno di distruggere
certe variavili temporanee, legate alla funzione pubblica, tramite la
chiusura del form.
Non è usuale, ma si può fare.
PS: con l'altro thread ho chiuso.


 lo permette più!
Quando uscirà Access.Net io sarò ormai da cremare...!!!
Non conosco il C e non conosco quanto possa sfruttare le Classi, ma
i linguaggi di programmazione più potenti e flessibili si basano
su questi concetti, tutt'altro che intuitivi.
VB e VBA in qesto sono assolutamente limitati, l'ereditarietà delle
classi arriva la massimo al 2° livello(mai avuto la necessità di andare
oltre), ma il 2° livello è assolutamente utile quando crei delle Collection
di Classi ad esempio
clsControl ---> la sua Classe Collection diverrebbe clsControls che non
fà altro che rendere agibili l'ADD, il REMOVE e l'ENUM(non documentato)
In questo modo dichiarando la Classe clsControls erediti i metodi e le
proprietà della Classe clsControl indicizzandoti sul'Oggetto.
E' da un'anno che mi sono messo a sviluppare Classi, e se strutturate
bene sono decisamente una semplificazione notevole, ti basti pensare
al concetto di WMI, estremamente complesso ma decisamente flessibile,
ed al modello delle SuperClassi.
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------


Fossi in te non mi preoccuperei più di tanto...magari ogni tanto mi 
riguarderi i lavori fatti sul tuo sito ;-)...giusto per "fare chiarezza" 
sulle capacità e potenzialità :-)

 sulle capacità e potenzialità :-)
Sono solo giochini, carini ma giochini.



E' giusto anche questo! La mia era solo un'opinione...
Grazie per aver chiuso il thread ;-)


E' proprio questo la cosa "preoccupante" -> che li consideri solo "giochini" 
;-) 

 Grazie per aver chiuso il thread ;-)
Si, però ho chiuso con quello ma non con questo, e una cosina vorrei dirtela
senza che tu te la prenda, visto che non ho assolutamente intenzione di
offenderti o urtarti.
Caro Gaspare: con quale coraggio chiedi a me, che ho postato soltanto tre
post nel thread, di smetterla, quando tu stesso (adesso sono le 15.08) ne
hai postati ben 28?! Non sarebbe il caso che TU stesso la smettesi di
alimentarlo?
(Adesso fai finta che ci siano una trentina di faccine sorridenti, non ho
assolutamente intenzione di offenderti).
Ecco, mi sono tolto il sassolino dalla scarpa e adesso devo uscire di casa,
quindi non leggerò la tua risposta se ci sarà. Ma ti do un consiglio: non
sempre è necessario avere l'ultima parola, e non mi riferisco soltanto a
questo thread.
Ciao, ti risentirò volentieri su altri argomenti.



Sto cercando di lavorare sul mio "caratteraggio"... è già da un bel pò che 
lo faccio -> ma faccio dei "passetti" per volta...
La prossima volta terrò in conto questa considerazione  :-)
Buona giornata
Gaspare