Newsgroup: it.comp.lang.visual-basic
Titolo: Disabilitare Pulsante dopo Evento Click

Ciao a tutti. =)
Ho un pulsante (Command Button) che quando viene premuto
deve eseguire delle istruzioni e
deve essere disabilitato (con Enabled = False).
Non mi interessa l'ordine delle due cose, se prima eseguire istruzioni
e poi disabilitarlo o viceversa.
Private Sub cmdMioComando_Click()
   <...>  'Istruzioni varie
   frm!cmdMioComando.Enabled = False
End Sub
Il problema è che quando tenta di disabilitare il comando, mi da un
errore a runtime (2164):
"You can't disable a control while it has the focus."
Giustamente, dico io.
Ma come posso risolvere il problema con qualche trucchetto non troppo
sporco per il codice? :o
La prima cosa che ho provato a fare è stata quella di dare
il .SetFocus ad un altro comando, inutilmente;
oppure di eseguire l'istruzione da un'altra procedura, richiamata
sempre dal codice dell'evento del click,
ovviamente inutile anche questo. (Anche qui, giustamente, dico io) :p
Probabilmente dovrei mettere quell'istruzione a seguito di un evento
che non è
richiamato dal Click sul comando, ma che comunque ci è collegato in
qualche modo?

 Giustamente, dico io.
Mica tanto... in VB "normale", anche le vecchie versioni, non c'e'
questo problema, l'istruzione è accettata e il focus passa
automaticamente al controllo successivo (seguendo TabIndex); anzi è
anche una pratica abbastanza comune quello di disabilitarlo all'inizio
e riabilitarlo alla fine, per esempio quando vuoi far partire una
qualche elaborazione lunga, ti serve intervallare qualche DoEvents ma
vuoi evitare che l'utente possa lanciarla una seconda volta prima che
sia finita.
Stai per caso parlando di una applicazione VBA?

Scevra ha scritto...

Questo succede perchè il controllo Button è sicuramente richiamato da
qualche parte nel codice,
perchè se io creo un progetto nuovo con un Form e un Command Button e
incollo il seguente codice...
Private Sub Command1_Click()
    Command1.Enabled = False
End Sub
...giustamente non mi dà errore.
--
Ciao Fede
By Chicco Production
http://bcp.freetools.it

 ha scritto

qualcosa mi sfugge, perche' e' un sistema che uso spesso.
Private Sub cmdScan_Click()
    On Error GoTo errman
'If chkSubFolders.Value = 1 Then
'    If MsgBox("Scandire tutto il percorso " & diskPath & " e sottocartelle 
?", vbYesNoCancel) <> vbYes Then Exit Sub
'Else
'    If MsgBox("Scandire il percorso " & diskPath & " ?", vbYesNoCancel) <> 
vbYes Then Exit Sub
'End If
    startTime = Timer
    cmdScan.Enabled = False
    Screen.MousePointer = 11
funziona. ho provato ora a commentare l'if perche' mi avevi fatto venire il 
dubbio che col msgbox toglievo il fuoco a cmdscan, ma funziona lo stesso.
ciao, a.

   frm!cmdMioComando.Enabled = False
frm.cmdMioComando.Enabled = False
...che ti visualizza automaticamente una list contenente le proprietà/metodi
applicabili all'oggetto interessato.


...giustamente non mi dà errore.
A dire il vero, in VBA, mi dà errore.
Ho creato un nuovo Mdb
Ho creato una nuova Form, in modalità Design view.
Ho aggiunto un pulsante ed inserito il seguente codice a seguito del
suo evento Click
____________________________
Private Sub Command0_Click()
    Me!Command0.Enabled = False
End Sub
____________________________
Premo sul pulsante e.. "You can't Disable a control while it has
focus"
:\

focus"
Non ti è permesso porre la proprietà Enabled/Visible su False,
all'interno di una routine del controllo interessato, in quanto in uso.
Ma ho provato a riprodurre il tuo esempio in questo modo da Access e non dà
problemi,
inserendo nel form 2 pulsanti, e chissà quante altre varianti ci sono
perdendoci un pò di tempo a fare delle prove.
Private Sub Comando0_Click()
    Comando1.Enabled = Not Comando1.Enabled
End Sub


 End Sub
Il problema è che mi serve disabilitare lo stesso pulsante che chiama
l'evento.
Inoltre non riesco a trovare nessuno scamuffo per poter modificare
quelle proprietà.
Qualcosa come:
Modifico, nelle istruzioni dell'evento click, un altro controllo
"nascosto" in modo che richiami un suo evento.
A questo punto nell'evento richiamato potrei cercare di disabilitare
il pulsante.
Ho provato con una casella di testo. Ma mi da lo stesso errore.
Richiama l'evento Change del campo, ma mi avvisa che quando tento di
modificare l'abilitazione del pulsante
mi avvisa che ha il focus e che non posso farlo.
Quindi a questo punto credo mi convenga cambiare strategia. :(
Grazie mille per l'aiuto.
Se a qualcuno viene in mente qualsiasi altra tecnica, anche strana, mi
aiutiiii,
per piacere :o

 per piacere :o
A me funziona,
nel senso che, la sequenza delle operazione è la seguente:
operazioni varie ....
setfocus su casella di testo (VISIBILE)
enable = false del pulsante.
tutto ok.
ciao
stefano

 tutto ok.
E' vero confermo, inserisci un button e un textbox e incolla questo codice:
Private Sub Comando0_Click()
    'qui inserisco il codice che mi interessa
    Testo1.SetFocus 'Sposto il focus sulla casella di testo
    Comando0.Enabled = False 'disabilito il pulsante


 enable = false del pulsante.
Hai perfettamente ragione. O_O
Ho trovato il mio errore in questo caso.
Per una prova frettolosa davo il focus alla form. Che newbie che sono
in VBA.
-----------------
Me.SetFocus
-----------------
Questa istruzione non segnala alcun errore, mantiene il focus al
controllo nello stesso form.
In un certo senso, credo serva poco o niente, se non farmi cascar
l'asino addosso.
Pensando... non mi funziona con la form, figuriamoci con un altro
controllo.
Invece mi sbagliavo; fretta, cattiva consigliera :-\
Grazie mille per il tempo che mi avete concesso. =D

 Grazie mille per il tempo che mi avete concesso. =D
Figurati,
quando si può e si riesce a dare una piccola mano, è sempre un piacere.
ciao
stefano