Ferramentas de Usuário

Ferramentas de Site


dev_net:vb.net:readonly_numericupdown

Tabela de Conteúdos

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

Autoria

Este artigo foi inicialmente escrito por Jorge Paulino para o seu blog VBTuga - Visual Basic em Português.

dev_net/vb.net/readonly_numericupdown.txt · Última modificação em: 2018/05/14 21:37 (edição externa)