Puoi facilmente richiamare una routine che esamini il valore di ogni
controllo presente nel form ad ogni digitazione da tastiera.
Ti riporto la routine.
Per funzionare devi settare la proprietà KeyPreview del form su True.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
Nell'evento Form_KeyUp, richiami la routine così:
Ovviamente devi includere la routine nel form. Potresti, con piccolecodice:Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) Call EseguiControllo End Sub
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 :
Ho provato entrambe le soluzioni con esito positivo.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)
Ciao,![]()

Rispondi quotando