lunedì 31 ottobre 2011

[VB.NET] Gestire scambi di Focus tra controlli

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.

Un Click su "Mi Piace" è il modo migliore per ringraziare l'autore di questo articolo.



0 commenti:

Posta un commento

Favorites Twitter Facebook Delicious Digg Stumbleupon More

 
Design by Free WordPress Themes Modificato da MarcoGG