Newsgroup: it.comp.appl.access
Titolo: E' possibile creare nuove istanze di una maschera ma in modo  parametrico ?

Osservate :
Dim FormAgain As New Form_NomeMaschera
With FormAgain
    .Visible = True
    DoCmd.MoveSize 2000, 2000
End With
----------------------------------------------------------------------
Ok, tutto bene.
Ma mi servirebbe poter fare una cosa "simile" a :
x = "mia maschera"
Dim FormAgain As New Form_(x)
Cioe', mi servirebbe poter istanziare di nuovo in modo parametrico.
Altrimenti sono costretto a dover cambiare il testo della funzione
in *ogni* maschera che la usa.
Oppure a fare un terribile select case, che pero' dovrei cambiare
ad ogni aggiunta di una nuova maschera !
Improponibile.
Grazie molte (in ogni caso).

 ha scritto nel messaggio 
news:a84ab0cf-4122-4c71...@g19g2000yqc.googlegroups.com...

Qualcosa del genere?
Qui apro una maschera per mezzo di una variabile testo (dunque posso usare 
qualsiasi nome maschera) e poi attibuisco al controllo "Controllore" un 
valore:
Public Sub AproMaschera()
Dim f As String
f = "NomeMaschera"
DoCmd.OpenForm f
Forms.Item(f)!Controllore = "Evviva"
End Sub
Ciao, Carlo 

Oltre al suggerimento di Carlo, vedi se questo Demo ti può aiutare...
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=269
 @Alex

 ha scritto nel messaggionews:a84ab0cf-4122-4c71...@g19g2000yqc.googlegroups.com...

Scusami Carlo, sei sempre gentile, ma sono un po' lento
a capire ... :-(
Ma come fai tu non mi si apre un "clone" della maschera
detta (ad esempio) X, perche' per aprire un clone occorre
l' istruzione :
Dim FormAgain As New Form_X
Oppure si ?
... Abbi pazienza.

 ha scritto nel messaggio 
news:4e81a970-f069-4ee1...@q12g2000yqj.googlegroups.com...



Oppure si ?
... Abbi pazienza.
--------------------------------------
Giusto. L'esempio era per farti capire come usare una variabile stringa per 
usare più o diversi nomi di maschera o immettere un valore in un controllo.
Per il clone avevi già scritto tu.
Comunque questo codice apre un clone:
In un modulo pubblico
Public NumIstanza As Integer
Public xPos As Integer
Public yPos As Integer
Nel modulo della maschera
Option Compare Database
Option Explicit
Dim frmNewForm As Form 'Questa variabile va dichiarata qui a livello di 
modulo di classe della maschera
'per evitare di usare visible = true
Private Sub TuoNomePulsanteSullaMaschera_Click()
    Set frmNewForm = New Form_NomeMaschera
    frmNewForm.SetFocus
    NumIstanza = NumIstanza + 1
    frmNewForm.Caption = "Nome della maschera (" & NumIstanza & ")"
End Sub
Private Sub Form_Close()
    xPos = 300
    yPos = 300
    NumIstanza = 0
End Sub
Private Sub Form_Open(Cancel As Integer)
    DoCmd.MoveSize xPos, yPos
    'aggiunge 300 a xPos e yPos per la successiva istanza
    xPos = xPos + 300
    yPos = yPos + 300
End Sub
Questa è il classico modo per aprire più cloni della stessa maschera. 

 Questa è il classico modo per aprire più cloni della stessa maschera.
Si ... Tutto perfetto, ma non ci capiamo. Sto chiedendo una cosa
diversa. :-)
Il problema e' in questa istruzione :
dim Mio_Clone as new Form_MascheraOriginale
Dove "MascheraOriginale" e' il nome della maschera
da clonare.
Ora attenzione, per favore.
Facciamo finta di voler costruire una funzione che
ha in input il nome di una maschera da clonare
e in output la maschera clone :
function CLONA ( dim Nome as string) as form
...
...
end function
Affermo :
Non e' possibile costruire questa funzione, perche'
all' interno deve esserci l' istruzione
dim Mio_Clone as new Form_MascheraOriginale
che dopo la parola chiave "NEW" non ammette
parametri.
A meno che all' interno della funz. si scriva una
banalita' del genere :
select case Nome
     case "Pippo" : dim clone as new form_pippo
     case "Pluto" :  dim clone as new form_pluto
   ...
   ...
end select
Improponibile.
Si puo' uscire in qualche modo da questa limitazione ?

radicale.002 ha scritto:

Usa un form contenitore con una submask
Chiami sempre il form contenitore e cambi dinamicamente i sourceobject 
del subform
--
ac

 del subform
Si,
ma cambiare dinamicamente i source object implica aver da
qualche parte un select case ... Quindi a che pro' ? Ho solo
spostato il problema, ma non l' ho risolto.
A meno che (probabile !) non abbia capito un tubo di quello che
m' hai scritto ... :-)

radicale.002 ha scritto:

Da qualche parte i nomi da assegnare devi pure averli.
Non so e non conosco la logica della tua applicazione ma ti dico come 
ragiona la mia.
Io ho un menu' che reperisce i dati da una tabella sulla quale c'e' 
scritto quale maschera aprire con che modalita' e con quali parametri e 
che nome assegnare all'istanza.
(Un po' piu' "avanti" di quello che fa il Pannello Menu' di Northwind).
La mia "general" function, quindi, non fa altro che fare una new sempre 
dello stesso formato e poi, prelevando dalla collezione dei parametri, 
passa la stringa per caricare il nome form e il nome istanza.
L'informatica e' fatta da una cosa che entra e dopo una macinatina da 
una uscita e la cosa in ingresso da qualche parte deve pur esserci.
La tua select case da qualche parte devi pure farla usa la variabile di 
confronto della case e passala alla apposita gestione
P.S. Normalmente io non uso faccette perche', per me, sono di "default".
--
ac

 confronto della case e passala alla apposita gestione
Si,
ma anche cosi' non riesci ad aprirti un clone di una certa maschera
in modo del tutto parametrico, perche' da qualche parte nel programma
ad un certo momento dovrai scrivere l' istruzione :
dim MioClone as new form_Anagrafica
Ora, il NomeMaschera non puo' essere una variabile.
Devi scrivere proprio form_Anagrafica e non per esempio
form_(X) dove X = "Anagrafica".-
Cioe', anche se tu metti in una tabella i nomi delle maschere
(diciamo nel campo "nome") non puoi scrivere :
dim MioClone as new form_(nome) o qualcosa del genere.
Voglio dire ...
Osserva la differenza che c'e' tra questo codice :
In un modulo : X = "Anagrafica"
e poi da qualche altra parte :
docmd.openform X
E questa :
dim Clone as new form_Anagrafica
Come la parametrizzi questa ?
Mi spiego ?

 Mi spiego ?
Avevo compreso il tuo problema. E' stato il mio problema qualche anno 
fa. Sono intervenuto proprio perche', come si suol dire, sapevo dove 
cadeva l'asino.
--
ac

 cadeva l'asino.
Ops ... Scusa tanto, hai ragione. Ad un certo punto, sara' stata la
stanchezza, non c' ho capito piu' niente.