65.9K
CodeProject is changing. Read more.
Home

PercentageUpDown Control

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.75/5 (6 votes)

Dec 14, 2006

CPOL
viewsIcon

35546

downloadIcon

363

Specialized version of the NumericUpDown control for entering and displaying percentage values.

Sample Image - PercentageUpDown.jpg

Introduction

I have been looking for a good way for entering percentages in the same way as numeric values are entered. In the past, I used a normal NumericUpDown, put a label behind it with "%", and did the mathematics of multiplying with and dividing by 100 in the form.

There is, of course, a better way to do it. Maybe, it's because it is so simple that nobody has published the source code for it on CodeProject. The control I present here also makes it easy to bind to floating point fields in a dataset.

By the way, I made the control look properly themed with Skybound's VisualStyles. To make it work, you have to put Skybound.VisualStyles.VisualStyleContext.Create() between the form's MyBase.New and InitializeComponent.

Source Code

Because it is so small, I give you the complete source code listing here. It is written in VB.NET, but I'm sure you can convert it to C#.

Public Class PercentageUpDown _
    Inherits Windows.Forms.NumericUpDown

    Public Overrides Sub DownButton()
        If Not Me.ReadOnly Then
            MyBase.DownButton()
        End If
    End Sub

    Public Overrides Sub UpButton()
        If Not Me.ReadOnly Then
            MyBase.UpButton()
        End If
    End Sub

    Public Overrides Property Text() As String
        Get
            Return MyBase.Text.TrimEnd("%")
        End Get
        Set(ByVal Value As String)
            MyBase.Text = Value & "%"
        End Set
    End Property

    <System.ComponentModel.Category("Data"), _
     System.ComponentModel.DefaultValue(0.0)> _
    Public Shadows Property Value() As Double
        Get
            Return MyBase.Value / 100
        End Get
        Set(ByVal Value As Double)
            MyBase.Value = Value * 100
        End Set
    End Property
End Class