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:
Enviar um comentário