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
My first encounters with computers where Sinclair, TI99-4A, C64, Apple II. Have programmed ever since. Worked for a few logistic companies.
I have been a VB.NET programmer for quite some years. I work with a small firm, that specializes in supply chain planning for bulk products. We have our own application, Delivery+, that helps vehicle planners with their daily job.
I am married and I have two children. I am building an eco-friendly house and try to live green.