Newsgroup: it.comp.lang.visual-basic
Titolo: Cambio nome ad un command

Salve a tutti, come posso cambiar nome ad un command e poi quando lo clicco
ritorna il nome di prima?
Esempio
Nome Command=Modifica
Nome dopo cliccato=Aggiorna
Modifica---Click----Aggiorna----Click----Modifica.....
GRAZIE

 Modifica---Click----Aggiorna----Click----Modifica.....
Option Explicit
Private Const c_sUpd = "Aggiorna"
Private Const c_sEdt = "Modifica"
Private Sub Command1_Click()
  With Me.Command1
    If .Caption = c_sEdt Then
      .Caption = c_sUpd
    Else
      .Caption = c_sEdt
    End If
  End With
End Sub
Private Sub Form_Load()
  Me.Command1.Caption = c_sEdt
End Sub
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 ha scritto nel messaggio
news:BuY_8.117689$vm5.3...@news2.tin.it...

Ciao Giuseppe!
Analizziamo un attimo il problema: si tratta, in sostanza, di avere a che
fare con una variabile che ha 2 sole possibilità: "prima del click" e "dopo
il click". Per questi tipi di valori, esistono le variabili booleane che ti
permettono di settare il proprio stato su due soli valori: True e False
(acceso e spento - 1 e 0)
Poniamo quindi di assegnare lo stato in cui si trova attualmente il
controllo ad una variabile di tipo booleano che quando è su True (acceso -
1), il caption del controllo sia "modifica", e che sia su "aggiorna" quando
invece è False (spento - 0).
L'istruzione su cui ruota tutta la procedura è "Stato = Not Stato" (beh, ci
sono solo 2 istruzioni, ma la più importante è questa!). Che vuol dire? Vuol
dire che la variabile viene prima "negata" (ossia siccome ci sono solo due
possibili valori per quel tipo di variabile, da "True" il valore viene
impostato a "False" e viceversa) e poi le viene riassegnato il nuovo valore
cosicché alla prossima chiamata, la procedura assegnerà al pulsante il nome
associato questa volta al valore opposto. In pratica se non è zuppa è pan
bagnato! Infatti prova a tradurre dall'inglese questa locuzione: "False =
Not True"..........ovvio!!!!
Poiché il valore di default per una variabile booleana è False, come nome
iniziale per il comando dovrai inserire quello che assegnerai alla variabile
in stato True, altrimenti il primo click non produrrà nessun effetto e il
risultato desiderato sarà visibile solo dal secondo click in poi. Prova, per
esempio, a scambiare l'assegnazione dei nomi "Aggiorna" e "Modifica".
Una notazione importantissima: vb ha la particolare caratteristica di
"azzerare" le variabili a livello di procedura ogni volta che questa viene
chiamata (si chiamano infatti variabili "dinamiche")... vuol dire che se
tramite una procedura io modifico una determinata variabile x, quando andrò
a chiamare quella procedura una seconda volta, il programma non "ricorda" il
valore di x modificato, ma "ricorda" quello di default. Nel tuo caso, in
pratica, l'utente cliccherebbe ma il nome non cambierebbe mai. A questo si
può ovviare in due modi: dichiarare la variabile nella sezione (General),
oppure renderla "Statica" (ossia in grado di mantenere un valore) in fase di
dichiarazione a livello di procedura. Prova, per esempio, a cambiare
l'istruzione "Static Stato As Boolean" con "Dim Stato As Boolean".
Ovviamente, in un'applicazione con un solo form o in cui una variabile è
disponibile in un solo form, è superfluo dichiarare una variabile tramite la
parola Static nella sezione (General).
----------
Private Sub Command1_Click()
  Static Stato As Boolean
  If Stato = True Then Command1.Caption = "Modifica" _
  Else Command1.Caption = "Aggiorna"
  Stato = Not Stato
End Sub
----------
Scusa la lungaggine e l'eventuale confusione... le spiegazioni non sono il
mio forte, ma credo sia di gran lunga più importante capire come funziona
una procedura piuttosto che vederne solo il risultato ;-)
Ciao e buon divertimento/lavoro/studio!

 End Sub
sai che a volte ( non ho controllato i bug sorry ) il vb mi dava problemi
con questa it then ? mi andava in loop ma non ricordo in che occasione , io
di solito uso IIF per queste interrogazioni ( e anche per eleganza )

 di solito uso IIF per queste interrogazioni ( e anche per eleganza )
Sull'eleganza dell'IIF() ci sarebbe molto da discutere :)
Come sulla leggibilità (tutto su una riga chilometrica!) e sull'over-head
della funzione stessa: ricorda che IIF() valida tutti e tre i parametri!
IIf(False, 1 / 0, 2)
' divisione per zero!
IIF(True, funzione_veloce, funzione_lenta)
' tempo = t(funzione_veloce) + t(funzione_lenta)
Ciao

 di solito uso IIF per queste interrogazioni ( e anche per eleganza )
    Sull'eleganza ha gia detto tutto/di piu' Zanna...
    Poi, e' vero, un DoEvents non ci starebbe male, specie con utenti dal
clic tremulo. :)


 ' tempo = t(funzione_veloce) + t(funzione_lenta)
... mizzica , non si finisce mai di imparare ( specialmente per me che so
agli inizi )