ReadOnly NumericUpDown
Controlo NumericUpDown
, na propriedade ReadOnly
, não tem um comportamento perfeito no seu funcionamento, pois embora esteja definido como ReadOnly
, é possível alterar os números através das setas (Up e Down).
Uma das formas de resolver este problema é criar um novo controlo, que herda o controlo base, e que faz o override ao UpButton
e DownButton
de modo a ignorar as setas, caso a propriedade ReadOnly
esteja definida.
Como a definição desta propriedade altera também a cor de fundo (BackColor
), foi criada uma shadow property para não fazer esta alteração e podes personalizar o controlo a gosto.
O resultado é esta classe que após compilada ficará disponível na Toolbox.
Exemplo
Class ReadOnlyNumericUpDown
Inherits NumericUpDown
Private m_ReadOnly As Boolean
''' <summary>
''' Cria uma propriedade para definir o NumericUpDown como ReadOnly
''' e como já existe uma propriedade com este nome é necessário criar
''' uma Shadows Property. Além disso como é uma palavra reservada tem
''' de ser colocada entre chavetas rectas []
''' </summary>
Public Shadows Property [ReadOnly]() As Boolean
Get
Return m_ReadOnly
End Get
Set(ByVal value As Boolean)
m_ReadOnly = value
End Set
End Property
''' <summary>
''' Ao ser carregado no botão para cima e se for ReadOnly ignora a acção
''' </summary>
''' <remarks></remarks>
Public Overrides Sub UpButton()
If Not Me.ReadOnly Then
MyBase.UpButton()
End If
End Sub
''' <summary>
''' Ao ser carregado no botão para baixo e se for ReadOnly ignora a acção
''' </summary>
''' <remarks></remarks>
Public Overrides Sub DownButton()
If Not Me.ReadOnly Then
MyBase.DownButton()
End If
End Sub
''' <summary>
''' Ao ser pressionada uma tecla e se for ReadOnly ignora a acção
''' </summary>
''' <remarks></remarks>
Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)
If Not Me.ReadOnly Then
MyBase.OnKeyDown(e)
Else
e.SuppressKeyPress = True
End If
End Sub
End Class