Visualizza il feed RSS

MarcoGG : Articoli Blog

[VB.NET] Gestione di scambi di Focus tra controlli

Valuta questo inserimento
di pubblicato il 10-01-2011 alle 09:25 (3865 Visite)
Descrizione :
Un esempio su come gestire in modo centralizzato il passaggio di Focus tra due controlli.

Tratto da :
[VB2010] - Evento Leave e GotFocus - Hardware Upgrade Forum

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 :

codice:
 
    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 è :

codice:
 
    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

aggiornamento da 13-05-2011 a 12:39 di MarcoGG

Tag: vb.net
Categorie
Programmazione

Commenti

  1. L'avatar di MarcoGG
    Modifica :
    Rimossi MsgBox() e VbCrLf --> Sostituiti con MessageBox e Environment.NewLine.