Descrizione :
Un esempio su come gestire in modo centralizzato il passaggio di Focus tra due controlli.
+ Articolo :
A volte può essere utile tenere traccia del passaggio di Focus tra un dato controllo e quello la cui modifica è logicamente correlata al precedente.
In questo esempio veniva chiesto come :
1. Visualizzare un messaggio warning solo se il Focus fosse passato da una delle 2 TextBox interessate all'altra.
2. Se il Focus fosse passato da una delle TextBox ad un Button > nessun warning.
3. Se il Focus fosse passato da un Button ad una delle TextBox > nessun warning.
Una possibilità è quella di raggruppare in un unico Metodo il check su quale controllo ha appena subito il Leave e quale ha appena ricevuto il Focus.
Se si interroga il Me.ActiveControl della Form durante un evento Leave si scopre che di fatto lo stato attivo è già sul secondo controllo, anche se l'aggiornamento della UI avviene dopo.
Se ad esempio ho una Form che ha 2 TextBox e 1 Button :
Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave ctrlLeaveGotFocus(sender) End Sub Private Sub TextBox2_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.Leave ctrlLeaveGotFocus(sender) End Sub
Entrambi chiamano un Metodo che si può costruire secondo esigenza, e che nel mio caso è :
Private Sub ctrlLeaveGotFocus(ByVal ctrlL As Control) Dim strLost As String Dim strGot As String If TypeOf ctrlL Is TextBox And TypeOf Me.ActiveControl Is TextBox Then strLost = DirectCast(ctrlL, TextBox).Name strGot = DirectCast(Me.ActiveControl, TextBox).Name MessageBox.Show(strLost & " ha perso il Focus." & Environment.NewLine & strGot & " ha ora il Focus.") End If End Sub
+ Fine Articolo.
0 commenti:
Posta un commento