NucentUpDown控制百分比?

时间:2013-02-06 06:05:37

标签: .net vb.net winforms controls numericupdown

如何设置NumericUpDown控件以百分比形式显示值?

2 个答案:

答案 0 :(得分:4)

您必须派生自己的自定义控件并覆盖UpdateEditText()方法。在我们处理此问题时,让我们覆盖默认的MinimumMaximumIncrement属性值,使其更加符合百分比。

我们还需要覆盖基本ParseEditText()方法,将用户生成的输入解释为百分比(除以100),因为用户希望输入80来表示{{ 1}}(和Decimal解析器需要忽略百分号)。

80%

我们可以通过添加Public Class PercentUpDown Inherits NumericUpDown Private Shared ReadOnly DefaultValue As New [Decimal](0.0) ' 0% Private Shared ReadOnly DefaultMinimum As New [Decimal](0.0) ' 0% Private Shared ReadOnly DefaultMaximum As New [Decimal](1.0) ' 100% Private Shared ReadOnly DefaultIncrement As New [Decimal](0.01) ' 1% Public Sub New() Value = DefaultValue Minimum = DefaultMinimum Maximum = DefaultMaximum Increment = DefaultIncrement End Sub Protected Overrides Sub UpdateEditText() If UserEdit Then ParseEditText() End If Text = Value.ToString(String.Format("p{0}", DecimalPlaces)) End Sub Protected Shadows Sub ParseEditText() Debug.Assert(UserEdit = True, "ParseEditText() - UserEdit == false") Try If Not String.IsNullOrWhiteSpace(Text) AndAlso _ Not (Text.Length = 1 AndAlso Text.Equals("-")) Then Value = Constrain(Decimal.Parse(Text.Replace("%", String.Empty), NumberStyles.Any, CultureInfo.CurrentCulture) / 100) End If Catch ex As Exception ' Leave value as it is Finally UserEdit = False End Try End Sub Private Function Constrain(origValue As [Decimal]) As [Decimal] Debug.Assert(Minimum <= Maximum, "minimum > maximum") If origValue < Minimum Then Return Minimum If origValue > Maximum Then Return Maximum Return origValue End Function End Class 属性来扩展类的范围,我们可以设置我们想要在设计时使用的numeric display format,以便我们可以支持显示值例如,作为货币。

上面的代码很好,很紧凑,专门针对百分比,利用现有的TextFormat属性。 DecimalPlaces属性存储为百分比的数学表示(例如,50为50%),因此插入公式很简单,而不必担心除以100。

答案 1 :(得分:2)

快速简单地回答这个问题:使用Extended WPF Toolkit中的DecimalUpDown而不是NumericUpDown(应该注意NumericUpDown也被列为过时的)。您需要做的就是在XAML中设置Maximum="1" Minimum="0.01" Increment="0.01" FormatString="P0"。我假设这个问题是关于扩展WPF工具包的,因为上面的答案是针对它的。

示例:

<xctk:DecimalUpDown Maximum="1" Minimum="0.01" Value="0.01" Increment="0.01" FormatString="P0" />

显示器:

DecimalUpDown Example