Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

VB.NET: Utilização de Overrides

O overrides ou sobreposição é uma propriedade ou procedimento/função herdado da classe base. Ou seja a possibilidade de alterar acções ou propriedades da classe, mas com uma capacidade mais abrangente e com muito menos limitações. Existem algumas operações que só podem ser feitas desta forma.

   

Por exemplo, a tecla TAB não é possível detectar ou modificar nos eventos KeyUp, KeyDown ou KeyPress de qualquer controlo. Para se efectuar desta forma era necessário utilizar o PreviewKeyDown e o KeyDown em conjunto, o que além de não ser prático e mais confuso. Este código simplesmente não trabalha:

   

   ' No controlo TextBox1 quando a tecla está pressionada (em baixo)

    Private Sub TextBox1_KeyDown(ByVal sender As System.Object, _

                                 ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown

   

        ' Caso a tecla seja TAB

        If e.KeyCode = Keys.Tab Then

            ' Ignora a tecla pressionada

            e.SuppressKeyPress = True

        End If

   

    End Sub

   

Para conseguir capturar a tecla antes de ela actuar e de uma forma simples pode-se usar, por exemplo, a função ProcessTabKey. Desta forma já é possível modificar o comportamento da tecla TAB e é executada independentemente do controlo seleccionado.

   

Neste caso estamos a bloquear a utilização da tecla TAB quando o TextBox1 estiver seleccionado.

   

    ' Quando é pressionada a tecla TAB

    Protected Overrides Function ProcessTabKey(ByVal forward As Boolean) As Boolean

   

        ' Se o controlo TextBox1 estives seleccionado

        If TextBox1.Focused Then

            ' Ignora a tecla pressionada

            Return True

        Else

            ' Executa o TAB para o próximo controlo

            Return MyBase.ProcessTabKey(forward)

        End If

   

    End Function

   

   

Nos forms com muitos controlos, especialmente quando servem para registo de dados, é pratico utilizar as teclas para saltar de controlo em controlo. A tecla que faz esta função é a tecla TAB ou Shift+TAB, que salta para o próximo ou anterior, de acordo com TabIndex definido. O TabIndex é uma propriedade, disponível na maioria dos controlos, que define qual a ordem de tabulação a executar. Ou seja, quando o form inicia é seleccionado o TabIndex com menor valor (normalmente o 0) e ao carregarmos na tecla TAB irá saltar para o próximo (normalmente o 1).

   

Mas a tecla TAB não é na realidade muito prática e muitos programadores, para melhorar a navegabilidade, utilizam a tecla Enter ou as cursoras KeyUp ou KeyDdown. Para simplificar este processo pode-se utilizar o overrides de funções, neste caso utilizando o ProcessCmdKey.

   

Por exemplo, para saltar de controlo em controlo utilizando as teclas cursoras, pode-se utilizar o seguinte código:

   

   

       ‘ Verifica quando é pressionado uma tecla

    Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean

   

        '  Se a tecla for a cursora Up ou Down

        If keyData = Keys.Up Or keyData = Keys.Down Then

              ‘ Selecciona o próximo controlo (de acordo com o TabIndex)

              Me.SelectNextControl(Me.ActiveControl, (keyData = Keys.Down), True, True, True)

        End If

   

        Return MyBase.ProcessCmdKey(msg, keyData)

   

    End Function

   

   

Mas podem-se também alterar algumas das propriedades de cada objecto/classe. O seguinte exemplo mostra como alterar o função do método ToString().

   

' Construção da Classe de Carros

Public Class Carro

   

    ' Sempre que é executado o método ToString() é mostrado

    ' a Marca – Modelo e não a simples conversão para string

    Public Overrides Function ToString() As String

        Return Me._Marca & " - " + Me._Modelo

    End Function

   

    ' Define uma propriedade para a Marca

    Private _Marca As String

    Public Property Marca() As String

        Get

            Return _Marca

        End Get

        Set(ByVal value As String)

            _Marca = value

        End Set

    End Property

   

    ' Define uma propriedade para o Modelo

    Private _Modelo As String

    Public Property Modelo() As String

        Get

            Return _Modelo

        End Get

        Set(ByVal value As String)

            _Modelo = value

        End Set

    End Property

End Class

   

   

Depois, e para mostrar o funcionamento da alteração do overrides da função ToString()

   

   

       ' Cria uma nova instância da classe Carro

        Dim clsCarro As New Carro

   

        ' Define a Marca e o Modelo do exemplo

        clsCarro.Marca = "Ford"

        clsCarro.Modelo = "Fiesta"

   

        ' Mostra o resultado que neste caso é "Ford - Fiesta" mas sem a

        ' utilização do Overrides apareceria WindowsApplication1.Carro

        Debug.WriteLine(clsCarro.ToString)

   

   

Em resumo e de uma forma genérica, o overrides permite alterar propriedades ou procedimentos/funções de uma classe e efectuar algumas operações apenas possíveis desta forma. No entanto é necessário ter algum cuidado na sua utilização, pois alterar funções que já se conhece poderá originar alguns problemas no código.



PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!

0 comentários:

Mensagens Recentes



Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico