Newsgroup: it.comp.appl.access
Titolo: Scatenare evento da maschera esterna.

Ciao,
all'interno di un db ci sono 8 maschere M1 : M8 gemelle senza origine record a cui dovrei inserire migliaia di dati uguali per ognuna di esse.
 
Questi dati vengono inseriti al solo click del pulsante rosso o del pulsante nero.
 
Domanda:
 
è possibile attivare contemporaneamente, tramite due pulsanti posti in una nuova maschera, i pulsanti delle suddette 8 maschere?
 
Vladimiro

Vladimiro... non entro nel merito di avere 8 Maschere UGUALI, spero tu ci abbia già pensato.
I dati si inseriscono nelle Tabelle non nelle maschere, queste ultime li visualizzano solo.
Detto questo servirebbe proprio capire cosa differenzia le 8 Maschere in termine di ORIGINE RECORDS...
 
In tutti i modi se devi fare un test o esercizio, devi inserire nelle Form una Funzione Public che poi richiami il codice scritto all'interno della Form che è di tipo Private.
 
Tutto questo suona veramente molto male dal momento che con una Query Insert o un ciclo ADD sulla Tabella ottiene l'effetto corretto ed alla fine basta il Requery della/e Form/s.
 
Prova a vedere meglio...
 
@Alex

 @Alex
 
Comunque, tornando al problema, se altri due pulsanti li avessi avuti all'interno della stessa maschera, non avrei avuto problemi a richiamarli:
 
Option Compare Database
Option Explicit
 
Public Sub ComandoR_Click()
 
End Sub
 
Public Sub ComandoV_Click()
 
End Sub
 
e nell'evento dei due pulsanti:
 
Primo) ComandoR_Click
Secondo) ComandoV_Click
 
Purtroppo, questo non avviene per maschere esterne.
 
Spero di aver chiarito il tutto.
 
Vladimiro


dico la mia, 
assumendo che rosso e nero sia una scelta comune
(valida per tutti)
MA NON SONO SICURO per la infattibilità da mancata sincronia
 
SOLO A SCOPO DI VALUTAZIONE 
(può essere da scartare immediatamente,
in particolare per la NON raggiungibile sincronia ...) 
 
proverei a risolvere la questione con una form "quadro"
che ha un pulsante rosso e uno nero
(e magari una lista numerica da 1 a 8)
e che contiene UNA subform
 
Dopo aver premuto il pulsante colorato
(ed eventualmente aver scelto la numerosità delle subform)
penso che si "possa riuscire" a far partire la sequenza delle subform
e a ribadire, da codice, il click del pulsante della subform 
di volta in volta caricata

 di volta in volta caricata
 
In che modo scateneresti l'evento?
 
Vladimiro


Ora e tempo fa ho incontrato la stessa problematica.
Parlando del mio problema attuale:
avrei la necessità di pilotare le funzioni di una maschera da un'altra 
maschera, in altre parole, alimento una tabella con dei dati di filtro che 
devono essere trattati con routine programmate dentro i pulsanti di un'altra 
maschera. Quindi vorrei richiamare le Sub dei pulsanti, ma sono Private e 
non posso...
Però potrebbe venire in aiuto il sistema che utilizzai tempo fa:
- innanzi tutto, i pulsanti delle M1...M8 non devono avere codice ma 
richiamare delle routine o funzioni su modulo che raccoglie le Public, così 
riutilizzi il codice senza ricopiarlo;
- potresti fare anche solo 1 maschera master M0 che funga da "prototipo" e 
aprirla in diverse istanze, oppure crearne "al volo" a runtime ricopiando la 
M0 con nome diverso;
- definisco il pulsante di avvio sulla maschera "master";
- il pulsante alimenta una tabella che si chiama "Automatismo" oppure 
"Filtro" con dei dati di "start", cioè con dei dati che possono essere sia 
quelli effettivi sia solo di comando per segnalare l'avvio delle procedure 
di elaborazione;
- il pulsante apre (istanze del) le maschere (docmd.openform);
- le maschere Mx hanno nell'evento "Su Apertura" del codice che legge la 
presenza dei dati, associa la query al RecordSource, avvia con delle CALL i 
nomi delle Sub dei pulsanti oppure direttamente le procedure Public;
- alla fine fai un bel "requery" di tutte le maschere.
Processo molto "truccoso" ma funziona e inizia a mettere ordine nel tuo 
applicativo se porti le routine in Public.
 


Ciao,
chiarimento già affrontato con Alex :-)
 
Le maschere sono senza origine record ed il codice VBA, presente solo nei pulsanti, alimenta centinaia di controlli.
 
Impensabile riportare il tutto in un modulo globale.
 
Avessi avuto tabelle, non ci sarebbe stato nessun problema.
 
Grazie comunque.
 
Vladimiro

Nelle arie Forms scrivi:
 
Public Function Esegui(optional Button as boolean=false)
 
Select case Button
  Case True: Call NomeRosso_Click()
  Case False: Call NomeNero_Click()
End Select 
End Function
 
Da fuori, solo se sono aperte la chiami:
Call Forms!NomeForm.Form(True) 'esegue button rosa
 
Con false es wgue il nero...
 
@Alex

Scusa ho ciccato un pezzo...
 
 Call Forms!NomeForm.Form.Esegui(True)

  Call Forms!NomeForm.Form.Esegui(True)
 
Ciao Alex,
per arie Form ho inteso il modulo generale della Form:
 
Option Compare Database
Option Explicit
 
Public Function Esegui(Optional Button As Boolean = False)
 
Select Case Button
  Case True: Call ComandoR_Click
  Case False: Call ComandoN_Click
End Select
End Function
 
All'interno di un pulsante di una maschera esterna così:
Private Sub Comando1_Click()
 Call Forms!NomeForm.Form.Esegui(True)
End Sub
 
mi dà errore sul !
 
oppure così:
 
Private Sub Comando2_Click()
Call Esegui(Forms!NomeForm.Form.Esegui(False))
End Sub
 
ma mi dà sempre errore.
 
Dove sbaglio?
 
Vladimiro

Perdo dei pezzi...
 
Call Forms!NomeForm.Esegui(True)
 
Non ho il pc... quindi porta pazienza.
 
@Alez

 In che modo scateneresti l'evento?
ha già una risposta 
 
e avendo dubbi, per il numero di controlli,
che TUTTE le form operative possano entrare
(come subform) in una unica "form quadro"
 
ed essendo necessario che TUTTE le form siano aperte
(se si chiudono si perdono i valori)
 
e anche (forse) di avere la necessità di un riscontro visivo
 
avrei pensato ad una "giostra" delle form dei valori,
TUTTE aperte e nascoste,
 
che la "form quadro" visualizza, in sequenza, come subform
(tutto da vedere se è possibile)
 
OPPURE
 
che una form pop up "fissa" (-->un "cruscotto")
chiama e visualizza in sequenza
(minori difficoltà operative ?)


Giorgio... condivido con te la stranezza e la necessità di ripensare al METODO.
 
La cosa anomala che io fatico a capire è la necessità di avere 8 Maschere IDENTICHE... e questo perchè io nella mia testa non lo farei mai.
 
Se le Maschere sono UGUALI, e cambiano i PARAMETRI di GESTIONE, e ne servono 8, il mio approccio sarebbe di svilupparne 1 con Metodi Parametrizzabili, poi si apre la stessa Form in MultiIstanza 8 volte passando i Parametri necessari alle differenze, salvo in una Collection le 8(n) istanze per la loro gestione e finita...
 
Mi rendo anche conto che ognuno in base al proprio KNOW-HOW vede le cose in modo condizionato... quindi non ho insistito per orientare la cosa ma mi sono limitato a dare risposta alla domanda.
 
@Alex


Ciao Giorgio e @Alex,
rispondo contemporaneamente ad entrambi.
 
Le 8 maschere si differenziano tra loro nel momento in cui, prima di cominciare a cliccare sui pulsanti, tramite una combo, sposto una barra che delimita i dati sviluppati a destra e a sinistra.
 
A seconda della posizione del suddetto parametro, vengono sviluppati dei dati di statistica.
 
Non citato precedentemente:
ho una nona maschera con un "quadro di comando" in cui ci sono 8 caselline che riportano sempre in continuo aggiornamento il dato che in quel momento sviluppa ogni singola maschera.
 
Purtroppo i due pulsanti all'interno di questa maschera quadro, ancora non funzionano.
 
Vladimiro


Vladimiro, la mia visione dei come poter sviluppare la ritengo adatta alla tua esigenza, semplificherebbe la struttura dandoti anche varie opportunità di centralizzazione... ma, come dicevo prima, può essere che essendo un metodo per te non conosciuto, alla fine possa complicarne la gestione.
 
Lascia pur stare.
 
@Alex


Ciao @Alex,
pensavo fosse una mia mancanza non saper scatenare tale evento tra due maschere.
 
Assodato che non si trova il modo di trovare una soluzione alla mia richiesta, proviamo con la Collection, suppongo all'interno di un modulo di classe.  
 
Solo che mi dovresti scrivere un bell'esempio visto che non è proprio il mio forte.
 
Vladimiro

Ho fatto 2 Maschere uguali [A] e [B], ed al loro interno ho inserito il medesimo codice:
 
Public Function ESEGUI(Optional Value As Boolean = False)
    Select Case Value
        Case True:      MsgBox "AZZ-TRUE"
        Case False:     MsgBox "AZZ-FALSE"
    End Select
End Function 
 
Poi ho realizzato una 3° Form [TEST] con 4 CommandButton con il seguente codice:
 
Private Sub Comando0_Click()
    Call Forms("A").ESEGUI(False)
End Sub
 
Private Sub Comando1_Click()
    Call Forms("A").ESEGUI(True)
End Sub
 
Private Sub Comando2_Click()
    Call Forms("B").ESEGUI(False)
End Sub
 
Private Sub Comando3_Click()
    Call Forms("B").ESEGUI(True)
End Sub
 
Ora apri tutte e 3 le Forms, punta poi la TEST e premi i Button, otterrai i MsgBox rilanciati dalle Forms A o B...
 
Verificato questo adegualo alla tua esigenza.
 
L'altro esempio è più complesso e richiede una conoscenza del Codice strutturato più adeguata con una indipendenza di scrittura maggiore... credo sia prematuro senza un TUTOR.
 
@Alex

Scusate forse non ho capito nulla, ma chiamare pulsanti (funzioni) da una form all'altra (aperta) si può, basta dichiarare tutto public e non private. È così semplice che sono sicuro di aver frainteso il quesito.....

 Scusate forse non ho capito nulla, ma chiamare pulsanti (funzioni) da una form all'altra (aperta) si può, basta dichiarare tutto public e non private. È così semplice che sono sicuro di aver frainteso il quesito.....
 
Si, ma alla base ci sono REGOLE di sviluppo della programmazione ad OGGETTI che ancorchè non siano conosciute da tutti... esistono e definiscono il DESIGN della programmazione.
 
NON è buona regola creare COMMISTIONE tra Metodi/Eventi PRIVATE e PUBLIC, e di conseguenza rendere PUBLIC eventi di Oggetti che sono assolutamente PRIVATE.
 
Si preferisce, nella buona tecnica di programmazione ad Oggetti, creare punti di Interfaccia con l'Esterno gestibili, appunto definiti METODI/PROPRIETA' PUBLIC di una Classe in questo caso la Form... che è Oggetto e Classe.
 
Ovviamente ognuno poi applica le proprie idee...
 
@Alex


Grande @Alex,
proprio quello che cercavo.
 
Grazie.
 
Vladimiro

Sono MOLTO dispiaciuto per quello che ho letto... tu sai dove e do cosa parlo.
 
@Alex

Mi trovi perfettamente d'accordo su tutto. Ma a Mali estremi.... :) 

Riporto questo link:
 
https://www.iprogrammatori.it/forum-programmazione/access/pulsante-click-access-t38931.html
 
 
Mah...
 
@Alex


Ciao @Alex,
mi dispiace quanto successo.
 
Scorri l'intero thred e ti accorgerai dell'intruso e della cortesia richiesta a Sandro Peruz che un tempo, ricordo, frequentava questo forum.
 
https://answers.microsoft.com/it-it/msoffice/forum/all/dalla-maschera-corrente-fare-click-su-un-pulsante/cb717cca-0b03-4167-bc4b-4b7954892291
 
 
Se debbo prendermi una colpa, è quella di aver postato lo stesso argomento su due forum diversi visto che non riuscivo di venirne a capo.
 
Vladimiro

Il crosspost non è vietato ovunque, la dove lo è ovviamente viene gestito.
 
Nel NG tuttavia il buonsenso vorrebbe che venisse evitato o, la dove necessario, comunicarlo nei siti al fine di incrociare informazioni.
 
Stendo un velo pietoso sulle iniziative folcloristiche... 
 
Spero un una più utile gestione.
 
Saluti.
@Alex


Ciao @Alex,
è dal 2010 che non ho richiesto più nessun tipo di aiuto in questo forum, cioè dal momento in cui ho cominciato a frequentare più assiduamente quest'altro forum gestito (forse male?) dalla Microsoft:
https://answers.microsoft.com/it-it/msoffice/forum?sort=LastReplyDate&dir=Desc&tab=All&status=all&mod=&modAge=&advFil=&postedAfter=&postedBefore=&threadType=All&isFilterExpanded=false&page=1
 
 
e non ti nascondo che comunque ho continuato sempre ad affacciarmi in questo di forum tant'è che qualche volta ho cercato di contribuire a dare delle risposte ai quesiti posti.
 
Cosa è successo questa volta?
 
Come sempre ho aperto un nuova discussione in cui chiedevo aiuto.
 
Ad un certo punto è intervenuta una persona che di programmazione (ammesso da lui stesso successivamente) non ne capisce nulla e a cui ho capito che interessava solo la demo messa online cercando di forzare le risposte altrui.
 
Sta di fatto che da quel momento non ho più ricevuto risposta e se scorri il thread del link postato, ti accorgerai della tempestività con cui ho tolto ed ho fatto togliere la demo online.
 
Siccome mi serviva urgentemente trovare una soluzione, ho pensato di postare lo stesso argomento anche in questo forum.
 
Mai avrei pensato di avere un comportamento scorretto nel non dichiarare che lo stesso argomento lo avevo richiesto altrove, visto che l'altro forum non ha nulla a che vedere con questo di forum.
 
Che dirti, mi servirà per la prossima volta.
 
Però dico, pure tu, non è che mi "conosci" da adesso...
 
Ma ti pare che ho bisogno di camuffarmi sotto false spoglie per frequentare di nascosto altri forum che tra l'altro, giusto per essere preciso, neanche conoscevo!
 
Vladimiro

 Vladimiro
 
CHIUSO, Ciao Vladimiro.
 
@Alex