【问题标题】:NumericUpDown: accept both comma and dot as decimal separatorNumericUpDown:接受逗号和点作为小数分隔符
【发布时间】:2014-06-19 15:29:13
【问题描述】:

有一种方法可以强制 c# NumericUpDown 同时接受逗号和点,以分隔十进制值?

我已经自定义了一个文本框来执行此操作(实际上用逗号替换点),但我很惊讶没有其他方法..

This 问题解释了如何更改分隔符,但我想同时使用!

【问题讨论】:

  • 为什么要同时使用两者?如果是针对多个应用程序部署/用户,您应该使用他们的本地文化,因为允许逗号和点作为小数分隔符对于某些用户来说可能会非常混乱。 NumericUpDown 不允许这种行为。您可以强制对 valueChanged 或 keydown 进行逗号/点转换吗?
  • 问题是使用另一个分隔符不会出错:它只是忽略了它犯了严重的错误,我想避免它。我正在开发一个商业软件,默默地将 10.22 转换为 1022 可能是个大问题!!
  • @Nicolas R:在 valueChanged 和 keydown 事件中可访问的值已经转换(错误的分隔符已被删除),我无法返回插入的值...
  • 改用 KeyPress(看我的回答)

标签: c# decimal numericupdown


【解决方案1】:

NumericUpDown 控件使用操作系统的文化来使用逗号或点作为小数分隔符。

如果您希望能够同时处理这两个分隔符并将它们视为小数分隔符(即:不是千位分隔符),您可以使用验证或手动事件处理,例如:

private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar.Equals('.') || e.KeyChar.Equals(','))
        {
            e.KeyChar = ((System.Globalization.CultureInfo)System.Globalization.CultureInfo.CurrentCulture).NumberFormat.NumberDecimalSeparator.ToCharArray()[0];
        }
    }

在本例中,您将用当前区域性的 NumericDecimalSeparator 替换每个点和逗号

【讨论】:

  • 非常聪明的解决方案!
【解决方案2】:

如果您将值粘贴到 NumericUpDown(通过剪贴板和 Ctrl+V),solution provided by Nicolas R 将不起作用。

我建议以下解决方案: NumericUpDown 控件与其他控件一样具有 Text 属性。但是,它对设计师和 Intellisense 是隐藏的。 使用 Text 属性,您可以像这样编写 ValueChanged 事件处理程序:

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
    numericUpDown1.Text = numericUpDown1.Text.Replace(',', '.');
}

另见:https://msdn.microsoft.com/en-us/library/cs40s7ds.aspx

【讨论】:

    【解决方案3】:

    对于标准 NumericUpDown 控件,十进制符号由操作系统的区域设置决定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-19
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多