Newsgroup: it.comp.appl.access
Titolo: Routine che apra una maschera filtrata in base al nome del controllo etichetta su cui si è fatto doppio click

Salve a tutti,
vi propongo un problema che a me sembra piuttosto arduo da risolvere:
ho una maschera principale, che contiene un certo numero di sottomaschere; 
all'interno di ognuna di queste sottomaschere ho un numero variabile di 
etichette, che vengono create a runtime mediante l'istruzione:
Set ctlLabel = CreateControl(MyForm, acLabel, acDetail, , , LabelX, LabelY, 
LabelWidth, LabelHeight)
Il numero delle etichette varia in base ai dati di una tabella, e ad ogni 
etichetta associo un NOME, sempre in base ai dati della tabella.
Alla fine apro la maschera principale (acNormal); a questo punto vorrei che 
facendo doppio click su una qualsiasi delle etichette create si potesse 
"estrarre" il suo nome, e passarlo ad una routine generica che mi aprisse 
un'altra maschera filtrata in base al nome dell'etichetta su cui ho fatto 
doppio click.
Esempio: faccio doppio click sul controllo etichetta "Etichetta001", vorrei 
mi si aprisse una maschera che mostra i dettagli del record della tabella 
che ha generato Etichetta001.
Non posso certo scrivere routines del tipo:
-----------------------------------------------------------------------------
Private Sub Etichetta001_DblClick(Cancel As Integer)
On Error GoTo Hell
Dim Filtro As String
    Filtro = "[ID] = N'001'"
    DoCmd.OpenForm "F_DETTAGLI", acNormal, , Filtro
Exit Sub
    Hell:
    MsgBox Err.Description, vbInformation + vbOKOnly, gstrAppTitle
End Sub
-----------------------------------------------------------------------------
perchè il numero di combinazioni di dati che portano a creare il nome 
dell'etichetta è altissimo (decine o centinaia di migliaia).
Qualcuno ha qualche suggerimento su che strada intraprendere per risolvere 
un problema simile? Grazie mille.
Marsilio

 Marsilio
Quello che fai è decisamente da far riflettere... la tecnica di aprire
una Form in modalità
Design per aggiungere controlli, a mio avviso, è da scartare in quanto
non consente di creare un MDE... ma chiaramente
è scelta personale.
Io avrei visto meglio la possibilità di mettere N controlli e di
gestirne la VISIBILITA'... tanto più di 750 non ne puoi mettere...
quindi il limite fisico lo incontri sempre.
In ogni caso:
Quando crei il controllo etichetta puoi anche definirne la Routine
Evento... nel tuo caso il Doppio Click.
Nel tuo caso sarà:
ctlLabel.OnDblClick="[Event Procedure]"
Il problema è che tu non hai il codice della EventProcedure scritto...
quindi devi fare un'altra cosa...!
Devi scrivere una Funzione nella Form alla quale passare il parametro
del NomeLabel quindi nella Function esegui...!
Function ApriFormFiltrata(strNomeLabel as String)
    '
-------------------------------------------------------------------
    ' Se devi recuperare la CAPTION della Label
    ' Caption=Me.Controls(strNomeLabel).Caption
    '
-------------------------------------------------------------------
    Filtro = "[ID] = '" & strNomeLabel & "'"
    DoCmd.OpenForm "F_DETTAGLI", acNormal, , Filtro
End Function
A questo punto devi costruire la Stringa che inserita nell'Evento
DoppioClick della Label richiami la Function e non la
RoutineEvento...!
Se lo scrivi nella Mascherina delle Proprietà scriveresti così:
=ApriFormFiltrata("NomeLabel...")
Visto che devi rendere automatica la creazione della chiamata devi
fare così:
ctlLabel.OnDblClick="=ApriFormFiltrata(" & chr(34) & ctlLabel.Name &
chr(34) & ")"
Ciao
@Alex

 ha scritto nel messaggio 
news:91958b0c-ad86-4438...@d45g2000hsc.googlegroups.com...
