NumericUpDown.Value未舍入到DecimalPlaces

时间:2014-02-16 12:46:54

标签: c# numericupdown

假设我有一个带有DecimalPlaces = 2的NumericUpDown。

用户键入“1.233”(他们不知道,不小心点击了“3”键两次)然后导航离开控件。此输入现在在控件中显示为“1.23”。但是,Value属性现在为1.233。 因此,对用户来说,他们正在使用值1.23,实际上,他们正在使用值1.233。 有没有办法让NumericUpDown返回“正确”值:1.23?

我理解DecimalPlaces属性“...设置要显示的小数位数”,但是用户无法通过简单地读取屏幕来确定将使用的值。

一种方法是始终忽略所有NumericUpDowns的Value属性,只使用Text属性(从IntelliSense隐藏)并对该属性执行decimal.Parse() - 但这看起来很尴尬。另一点是,如果用户键入“1.233”然后导航离开控件,那么,当ValueChanged事件发生时,Text属性仍为“1.233”。

1 个答案:

答案 0 :(得分:5)

是。 Validating事件始终可用于调整数据输入。像这样:

    private void numericUpDown1_Validating(object sender, CancelEventArgs e) {
        numericUpDown1.Value = Math.Round(numericUpDown1.Value, 
            numericUpDown1.DecimalPlaces, MidpointRounding.AwayFromZero);
    }