65.9K
CodeProject 正在变化。 阅读更多。
Home

带单位测量的 NumericUpDown

2006年7月28日

CPOL

1分钟阅读

viewsIcon

67275

downloadIcon

1121

如何创建一个带有单位计量的 NumericUpDown 控件。支持 Vista 样式!

Screenshot - UpDownEx_with_measure.jpg

该控件由 CTR (centro-tecnologia-rocci) 的 Rocci Luca 和 D'Andrea Vito 设计。

引言

该控件是经典控件 NumericUpDown 的一个演进。numericUpDown 控件可视化并返回一个属性值,一个十进制值,但是如果我们还需要指定计量单位来增加一个数值呢?这时,我们的 UpDownEx 控件就派上用场了。我们的控件返回一个双精度浮点数值,并可视化一个双精度浮点类型的值和一些指示计量单位的文本。增量相对于可视化数字的精度。

例如,如果您输入一个带有三位小数的数字,则增量将为 0.001。此外,每次在计量单位阶梯中,无论是增加还是减少,都是自动的。

代码

UpDownEx 代码继承自“Control”类,并包含一个标准的 NumericUpDown 控件和一些属性,例如一个指示计量单位的 Array

Private Sub Format()
    Dim str_Format As String
    If UpDown.Value = int_Factor * (int_UnitsActual) And int_UnitsActual > 0 Then
        int_UnitsActual -= 1
        UpDown.Value -= 1
        UpDown.DecimalPlaces -= 1
    ElseIf UpDown.Value = int_Factor * (int_UnitsActual + 1) And _
           int_UnitsActual < str_Units.Length Then
        int_UnitsActual += 1
        UpDown.Value += 1
        UpDown.DecimalPlaces += 1
    End If
    UpDown.Increment = dbl_Decimals(UpDown.DecimalPlaces)
    Dim i As Integer
    str_Format = "#,"
    For i = 0 To UpDown.DecimalPlaces - 1
        str_Format += "#"
    Next
    str_Format += "0."
    For i = 0 To UpDown.DecimalPlaces - 1
        str_Format += "0"
    Next
    dbl_Value = UpDown.Value - (int_Factor * int_UnitsActual)
    Me.TextControl.Text = dbl_Value.ToString(str_Format) & " " & str_Units(int_UnitsActual)
End Sub

Screenshot - NewProperty.gif

计量单位

  • Factor:表示两个计量单位之间的步长
  • Maximum:表示最大值
  • Minumum:表示最小值
  • MeasureUnits:表示包含计量单位的字符串数组

  • FormattedValues:表示带有计量单位的值
  • UnformattedValues:表示值
支持 Windows Vista 样式

Screenshot - vistaos.jpg

© . All rights reserved.