Newsgroup: it.comp.appl.access
Titolo: Disabilitare Controlli SubForm

Un cordiale saluto ai pochi rimasti,
col codice seguente, diabilito i controli della mia maschera
--------
Dim ctl As Control
    For Each ctl In Me.Controls
        If ctl.Tag = "X" Then ctl.Enabled = True
    Next
---------
Nella Mia maschera ho una sottomaschera,
ed avrei bisogno di disabilitare anche i controlli
in essa contenuta.
Come cambierebbe il codice?
Ciao
Napoleone 

 ha scritto nel messaggio
news:mmkoe.133459$IN.22...@twister2.libero.it...

Vai sul Sito Comune (link qui soto) e nella Sezione Forms leggi la FAQ di
Christian Pozzati intitolata "3.56 Bloccare e sbloccare da VBA i controlli
di una maschera e dell'eventuale sottomaschera in essa contenuta".
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
---------------------------------------------------- 


Ciao Roberto,
ho visto quanto mi hai suggerito,
ma avendo già fatto quasi tutto, pensavo si potesse aggiungere una riga e 
via!
Non'e possibile o è meglio l'altra soluzione.
Napoleone 

[CUT]
Ciao Napoleone,
prova 1 pò a recuperare la funzione che ti ha scritto Alex nel post passato 
(quello che sembrava un "parto"..) poi richiami quella vunque ne hai 
necessità (Alex ti ha scritto anche il modo per richiamarla...mi  pare devi 
passare il nome del form etc...)
Ciao
Gaspare 

 ha scritto nel
messaggio news:Nykoe.133485$IN.22...@twister2.libero.it...

Sai che per poter gestire questa cosa occorre avere in ogni Form un
controllo al quale passare il Focus preventivamente...?
Bene sul mio Sito alla sezione GENERAL hai un demo che fà esattamente
quanto chiedi:
1.34 Classi ed Eventi Public di Classi
Fai attenzione è abbastanza complesso sfrutta una
funzione ricorsiva e ti permette di passare il valore della
TAG per effettuare quanto chiedi, ma se rispetti quanto suggerito
funziona decisamente bene.
Devi solo copiare la Classe nel tuo DB, ed usare il codice associato al
CommandButton relativo alla proprietà Enabled.
P.S. Ricorda di inserire il Controllo cFocus che trovi nell'angolo a
Sinistra
con dimensioni 0,0 per essere NON_VISIBILE.
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

 ha scritto nel messaggio
news:Aaloe.981311$b5.42...@news3.tin.it...

Non è così immediata, per rendere questo funzionale occorre rendere
la funzione Ricorsiva, ma per questo ancora più importante è
la gestione ERRORI ed il tentativo di disabilitare un controllo con
lo stato ATTIVO(Focus) per questo il Demo che glio ho suggerito
è la cosa giusta.


[CUT]
In un modulo:
----------------
Public Function SetControlState(frm As Access.Form, State As Boolean,
TagValue As String) As Boolean
    On Error GoTo Err_ControlState
    Dim ctl As Access.Control
    For Each ctl In frm.Controls
        If ctl.TAG = TagValue Then ctl.Enabled = State
    Next
    SetControlState = True
    Exit Function
Err_ControlState:
    SetControlState = False
    MsgBox err.Number & " " & err.Description
End Function
--------------
Per richiamarla
Private Sub NomePulsante_Click
    Static blState as Boolean
    If SetControlState(me, blState ,"X")=true then blState =not blState
End sub
---------
Copyright by Alessandro Baraldi ;-)

 ha scritto nel messaggio 
news:d7sn6p$4nt$1...@domitilla.aioe.org...

PARDON...ti ho letto solo adesso ;-)
Buona giornata
Gaspare 

 Gaspare
Si non preoccuparti dai un'occhiata al Demo suggerito, quanto hai
segnalato non è pienamente funzionale in caso di SubForm,
e soprattutto impone altro codice per evitare errori...!


 ha scritto nel messaggio 
news:d7snec$509$1...@domitilla.aioe.org...

Ok Alex...buona giornata ;-) 

 ha scritto nel messaggio 
news:Djloe.981342$b5.42...@news3.tin.it...

Stanotte me lo studio e domani vi facccio sapere.
Buon cenone del Sabato sera!
Napoleone 

 ha scritto nel messaggio 
news:d7snec$509$1...@domitilla.aioe.org...

Una "figata" -> COMPLIMENTI ;-) 

 ha scritto nel messaggio 
news:hrloe.133573$IN.22...@twister2.libero.it...

Grazie per il "cenone" ma se si fà una "passeggiata" è giaa tanto..."occhio" 
a non prenderti l'abitudine di "smanettare" la notte...fà male alla salute 
;-)
Buon week-end a te e famiglia :-)
Gaspare 

 Gaspare
Ciao Gaspare!
E' solo perchè sono di servizio! Per cui debbo stare con gli occhi aperti in 
ogni modo!
... la passeggiata naturalmente, dopo il gran cenone :-)
..e io lavoro!
Buon week-end  anche a te & C.ny
Napoleone 

 ha scritto nel messaggio 
news:hrloe.133573$IN.22...@twister2.libero.it...

Cmq "obiettivamente" la soluzione di Roberto (3.56 Bloccare e sbloccare da 
VBA i controlli di una maschera e dell'eventuale sottomaschera in essa 
contenuta
        Christian Pozzati) non è neanche male...quella di Alex ovviamente è 
"più elaborata" e riguarda gli "eventi delle classi"...forse è il caso che 
ti studi prima quella del sito comune e poi "pian piano" passi a quella di 
Alessandro che si diverte un mondo con le classi ;-)
      Buona giornata
      Gaspare

 ha scritto nel messaggio 
news:d7sn3g$4jt$1...@domitilla.aioe.org...

Ho importato tutto nel mio db,
mi segnala:
Necessario oggetto (errore 424)
--------------------
Private Sub mFocus_Click()
  Static blValue As Boolean
   ' QUESTO E' IL NOME DEL CONTROLLO DA PASSARE COME FOCUS
   mP.AlwaysActive = "mFocus" '---MI SI PIANTA QUI evidenziando la riga---
   mP.StartSetting Me, "", "Enabled", blValue
   blValue = Not blValue
End Sub
------------------------
Ciao e complimenti, la demo è fatta proprio bene!
Napoleone

[CUT]
Ciao Napoleone,
per l'errore interverrà Alex...giacchè sei abbastanza "appassionato" ti dò 
qualche link che ti può ritornare utile in merito...
http://www.vbitalia.it/articoli/lez29.asp?lez=lez29
http://msdn.microsoft.com/library/ita/default.asp?url=/library/ITA/vbcn7/html/vbconclassmodulestepbystep.asp
http://www.visual-basic.it/areaarticoli.asp
 - La mia prima classe (a cura di 
Diego Cattaruzza) - Passo per passo, la realizzazione di una semplice classe
http://www.visual-basic.it/articoli/scebClassi1.htm
Buona domenica
Gaspare 

 ha scritto nel messaggio 
news:%awoe.982464$b5.42...@news3.tin.it...

Grazie Gaspare, sei sempre gentilissimo!
... già sveglio a quest'ora? Di domenica?
Ciao
Napoleone 

 Napoleone
No amo dormire più del necessario anche se "certe domeniche" dormo molto di 
più!
Adesso ti lascio...per l'errore verrà Alex che ti darà qualche chiarimento 
sul suo "giochino" ;-)
Alla prossima
Gaspare 

 Napoleone
Quello è, come c'è scritto nei commenti, il nome di un controllo
di tipo TextBox chiamato "mFocus" posizionato come ti dicevo nell'angolo
in alto a SX del corpo della SubForm.
Nella Form principale invece è il nome del Controllo commandButton
In pratica sia nella Form che nella Sub devi avee un Controllo chiamato in
quel
modo.
PEr non vederlo riduci le sue dimensioni a Larghezza=0 ed Altezza=0, serve
proprio
per evitare che durante la disabilitazione venga generato l'errore "Non è
possibile
disabilitare un controllo mentra ha lo stato attivo", quindi sposto il focus
su quello
di prima...!
La proprietà AlwaysActive della classe serve proprio per indicare alla
stessa
il nome di questo Controllo.
Se non l'hai inserito ovviamente non và...!
Ciao
-- 
@Alex (Alessandro Baraldi)


 @Alex (Alessandro Baraldi)
Ciao Napoleone 

 ha scritto nel messaggio
news:gnyoe.134058$IN.23...@twister2.libero.it...

Quindi ti da ancora problrmi...?
Non ho capito...!


 @Alex (Alessandro Baraldi)
Si scusami, non ho finito di scrivere quello che volevo:
Sempre lo stesso msg.
Ciao
Napoleone 

 Napoleone
Non è possibile se hai fatto un COPIA/INCOLLA coretto
deve andare.
Hai copiato anche l'istanza fatta nell'EVENTO LOAD:
Private Sub Form_Load()
   Set mP = New clsEnable
End Sub
Copia anche quella nell'Evento Close per liberare risorse...!
Ciao
-- 
@Alex (Alessandro Baraldi)


Dimenticavo, ma non per mia omissione:
quando usi le classi vanno istanziate, quindi non ti basta copiare
la classe ed i COmmandButton, ma devi leggere bene il codice
che SEMPRE deve istanziare la classe:
' QUESTO E' IN TESTA AL MODULO NELLA FORM
Private WithEvents mP   As clsEnable
quindi l'evento LOAD Istanzia la Classe poi puoi usarla...!!!!!!


 @Alex (Alessandro Baraldi)
C'è qualche controllo che si chiama mP??
Napoleone 

 ha scritto nel messaggio 
news:d7ud1d$gml$1...@domitilla.aioe.org...

tutto il codice che segue, io me lo trovo in GENERAL,
nel tuo db si trova in mP
???
Napoleone
' ========================  CALLBACK EVENTI DI CLASSE 
========================
Private Sub mP_SettingControlAborted()
   MsgBox "AZIONE ANNULLATA"
End Sub
Private Sub mP_SettingControlProgress(Value As Long, Form As Access.Form, 
Control As Access.Control)
   Me.lblProgress.Caption = "Form = [" & Form.Name & "] --> Controllo = [" & 
Control.Name & "]" & vbCrLf & "N° " & Value
   Me.Repaint
   Sleep 250
End Sub
Private Sub mP_SettingControlStarting(Cancel As Integer)
   If MsgBox("Sicuro di voler Continuare  ?", vbQuestion + vbYesNo) = vbNo 
Then
      Cancel = True
      Exit Sub
   End If
   Me.lblProgress.FontBold = True
   Me.lblProgress.Caption = "INIZIO SEQUENZA....."
   Me.Repaint
   Sleep 1000
   Me.lblProgress.FontBold = False
End Sub
Private Sub mP_SettingControlTerminate(Stato As Boolean, Value As Variant)
   If Stato = True Then
         MsgBox "FINITO CORRETTAMENTE " & vbCrLf & _
                "proprietą [" & mP.PropertyName & "] = " & Value, 
vbInformation
   Else
         MsgBox "AZIONE ABORTITA !", vbCritical
   End If
End Sub
Private Sub mP_SettingControlError(ErrNum As Integer, ErrDesc As String)
   MsgBox ErrNum & " " & ErrDesc
End Sub
' ========================  CALLBACK EVENTI DI CLASSE 
========================

Scusa ma non facevi prima a dire che non hai mai usato Classi
e non sai come fare...??????????
'------------------------------------------------------------------------
'                  CODICE DA COPIARE NELLA MASCHERA
'                    NON CAMBIARE NOME A NULLA
'------------------------------------------------------------------------
Option Compare Database
Option Explicit
Private WithEvents mP   As clsEnable
Private Sub Form_Load()
   Set mP = New clsEnable
End Sub
Private Sub Form_Close()
   Set mP = Nothing
End Sub
Private Sub mFocus_Click()
   Static blValue As Boolean
   ' QUESTO E' IL NOME DEL CONTROLLO DA PASSARE COME FOCUS
   mP.AlwaysActive = "mFocus"
   mP.StartSetting Me, "", "Enabled", blValue
   blValue = Not blValue
End Sub
mP è l'istanza del Modulo di Classe, ed ovviamente se lo chiami
in un altro modo non funziona.....!
Nei Modulo trovi "clsEnable" devi importare anche quello e non
RINOMINARLO...!!!!
Saluti


 @Alex (Alessandro Baraldi)
... secondo me l'ignorante vive felice,
chi ha la coscienza di non sapere, invece....
.... io una volta ero felice di quel poco che sapevo, adesso non piů.
Ti farň sapere a presto.
Napoleone 


Al click su mFocus
mi segnala:
Variabile oggetto o variabile del blocco With non impostata (errore 91)
-------------------
Private Sub mP_SettingControlStarting(Cancel As Integer)
   If MsgBox("Sicuro di voler Continuare  ?", vbQuestion + vbYesNo) = vbNo 
Then
      Cancel = True
      Exit Sub
   End If
   Me.lblProgress.FontBold = True
   Me.lblProgress.Caption = "INIZIO SEQUENZA....."
   Me.Repaint
   Sleep 1000 ----(((MI SI PIANTA QUI))-----
   Me.lblProgress.FontBold = False
End Sub
--------------
Almeno è cambiato il messaggio!
Napoleone 

 Napoleone
Leggi il Codice :
richiede che nella Form ci sia un Controllo di tipo LABEL
chiamato lblProgress c'è...? Se non c'è saprei io dove metterlo... ;-)
In ogni caso lascia perdere quel codice che ti frega, è solo dimostrativo.
Ti ho indicato prima cosa usare BASTA quello, non ti complicare la vita
finchè non ne hai le basi.


 @Alex (Alessandro Baraldi)
Napoleone 

 Napoleone
Ciao


 @Alex (Alessandro Baraldi)
Parabola signica: Diamoci da fare finchè possiamo!
Buon appetito!
Napoleone

> Vorresti darci un'occhiatina?
Per caritą...!
Passo.............
;-)
-- 
@Alex (Alessandro Baraldi)



Anch'io.
Alla prossima,
Napoleone