Puoi facilmente richiamare una routine che esamini il valore di ogni
controllo presente nel form ad ogni digitazione da tastiera.
Ti riporto la routine.
codice:
Private Sub EseguiControllo()
Dim controllo As Control
Dim bEnabled As Boolean
bEnabled = True
For Each controllo In Controls
If TypeOf controllo Is TextBox Then
If Trim$(controllo.Text) = "" Then bEnabled = False
End If
If TypeOf controllo Is ComboBox Then
If Trim$(controllo.Text) = "" Then bEnabled = False
End If
Next controllo
Command1.Enabled = bEnabled
End Sub
Per funzionare devi settare la proprietà KeyPreview del form su True.
Nell'evento Form_KeyUp, richiami la routine così:
codice:
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Call EseguiControllo
End Sub
Ovviamente devi includere la routine nel form. Potresti, con piccole
modifiche, generalizzare la routine e inserirla in un modulo.
Avresti bisogno, in questo caso, di passare un riferimento al form
sul quale eseguire il controllo ed il riferimento al bottone che vuoi
abilitare/disabilitare.
Per evitare di portarti dietro degli oggetti ingombranti,specialmente
se hai forms molto complessi, potresti sfuttare le collection di VB.
Infatti ogni applicazione ha già un insieme Forms che contiene tutti
i forms utilizzati ed ognuno di essi ha un insieme di controlli
(Controls) che contiene tutti i controlli presenti nel form (come
peraltro si evince dal codice che ti ho riportato).
La routine generalizzata potrebbe essere :
codice:
Public Sub EseguiControllo(sFormName As String, sCommandName As String)
Dim controllo As Control
Dim form As form
Dim bEnabled As Boolean
bEnabled = True
For Each form In Forms
If form.Name = sFormName Then
For Each controllo In form.Controls
If TypeOf controllo Is TextBox Then
If Trim$(controllo.Text) = "" Then bEnabled = False
End If
If TypeOf controllo Is ComboBox Then
If Trim$(controllo.Text) = "" Then bEnabled = False
End If
Next controllo
form.Controls(sCommandName).Enabled = bEnabled
End If
Next form
End Sub
' La richiami da ogni form che desideri, sempre nell'evento
' Form_KeyUp, in questo modo :
' Me.Name rappresenta il nome del form,
' Command1.Name va inteso essere NomeDelBottone.Name
Call EseguiControllo(Me.Name, Command1.Name)
Ho provato entrambe le soluzioni con esito positivo.
Ciao,