Newsgroup: it.comp.appl.access
Titolo: E' possibile resettare tutti i controlli di una form?

Ho una form che contiene una struttura a schede con tutti controlli non 
associati, e' possibile in una botta sola, resettare tutti i controlli?
Ad esempio se potessi associare all'evento click di un pulsante qualcosa 
tipo: Me!* = Null (questo e' solo un esempio... e' chiaro che "Me!*" a 
VBA non piace)
Per le singole schede Me!nomecontrollo = Null e' praticabile ma per 
tutte diventa un po' lunghetto scrivere il nome di tutti i controlli! :(

LoTo ha scritto:

Con un ciclo:
dim ctl as control
for each ctl in me.controls
  ...
next
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Namor
Accidenti che tempestivita'!
GRAZIE MILLE!! ^__^
* mi puoi fare anche qualche esempio concreto del codice "..."

LoTo ha scritto:


L'esempio č tutto lě. Si fa con 4 righe di codice. Basta che sostituisci
ai puntini il codice che vuoi eseguire, per esempio ctl.value=null


 Namor
he he he... in realta' e' proprio quanto avevo provato a fare subito... 
peccato che mi restituisca:
"Errorre di run-time "2448": Impossibile assegnare un valore all'oggetto"
Secondo me il problema sta nel fatto che, come esposto nel mio primo 
post, si tratta di una form che contiene una strutura a schede (che sono 
controlli) e vari pulsanti, combobox, listbox e textbox che sono altri 
controlli quindi forse devo anche creare un ciclo
If ctl.ControlType = acTextBox (o acConboBox, le ListBox devono restare) 
Then
   With ctl
     .nonsocosa = null
   End With
End If
che specifichi quale tipo di controllo debba assumere (non so ancora in 
che modo) il valore Null.
Tu dimmi cosa ne pensi... io intanto ci provo.
Ciao e grazie ancora!

LoTo ha scritto:




Si, volevo aggiungerlo ma avevo già spedito il post. Certi controlli non
hanno la proprietà .Value, quindi ti dà errore.
Basta che controlli il .ControlType all'interno del ciclo e azzeri il
valore solo di certi tipi di controllo.
Io farei così
  tipo=ctl.ControlType
  if tipo=acTextBox Or tipo=acComboBox Or tipo=.... Then
    ctl.value=null
  End if


 ha scritto nel messaggio
news:cau354$96n$1...@news.newsland.it...

Oppure lavori con i tag
MAssimiliano

 MAssimiliano
Buono anche questo.
for each...
  if ctl.tag="svuotami" then ctl.value=null
next


 Namor
aaaaa... io ho fatto cosi'e funzia:
Private Sub resetatutto_Click()
Dim ctl As Control
For Each ctl In Me.Controls
   If ctl.ControlType = acTextBox Then
     With ctl
         .DefaultValue = ""
     End With
   End If
Next
For Each ctl In Me.Controls
   If ctl.ControlType = acComboBox Then
     With ctl
         .DefaultValue = ""
     End With
   End If
Next
End Sub
ma la tua idea di mettere il ControlType in una variabile che poi puo' 
assumere il valore Null rende tutto molto piu' semplice!
Ora lo faccio.
Grazie Namor!

LoTo ha scritto:




Ma volevi svuotare i controlli o azzerare i valori predefiniti
(.defaultvalue)?
Il controltype l'ho messo nella variabile solo per non rallentare
l'esecuzione richiamandolo troppe volte nell'if se devi testare più tipi
diversi di controllo. Non è che poi basta assegnare il valore null alla
variabile e si azzerano tutti i controlli, quello lo devi comunque fare
con la riga ctl.value=null (o .defaultvalue). Il with non ti dà nessun
vantaggio se ci metti dentro una sola istruzione, lo puoi togliere.


 Oppure lavori con i tag
I tag cioe' quei commenti esplicativi che vengono fuori quando il 
puntatore va sul controllo?
Se si, in che modo si possono aggiornare tutti i controlli lavorando con 
quelli?

 MAssimiliano
Oppure, se trattasi di operazione bruta, utilizzi: On Error Resume next...
Ciao.
-- 
Sergio MAZZA

 Namor
Si, hai ragionissima sui with ed anche sigli OR, ecco come e' diventato:
Private Sub resetatutto_Click()
Dim ctl As Control
For Each ctl In Me.Controls
   If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
     ctl.DefaultValue = ""
   End If
Next
End Sub
Cosi' va, invece se scrivo:
Private Sub resetatutto_Click()
Dim ctl As Control
For Each ctl In Me.Controls
   If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
     ctl.Value = Null
   End If
Next
End Sub
mi restituisce sempre: "Errorre di run-time "2448": Impossibile 
