【问题标题】:How to allow only comma for decimal?如何只允许小数点的逗号?
【发布时间】:2017-10-25 19:37:10
【问题描述】:

我需要限制所有符号,除了空格、数字键盘中的 0-9、小键盘和逗号中的 0-9。我在小键盘中处理了除逗号之外的所有内容:

e.Handled = !((e.Key >= Key.D0 && e.Key <= Key.D9) || 
        (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) ||
        e.Key == Key.Space || e.Key == Key.OemComma);

小键盘中逗号的问题被识别为Decimal,但Decimal也是一个点,我应该禁止。

如何用点和逗号分隔Decimal

【问题讨论】:

  • 你的键盘小键盘里真的有逗号吗?
  • 是的。这取决于键盘布局。对于英文布局 Decimal 是点,对于俄语布局 Decimal 是逗号。我需要处理它。
  • @Ecnerwal 将键权设为“0”。 ., 取决于本地化

标签: c# wpf events key


【解决方案1】:

根据另一个答案中的cmets,听起来您要问的是如何确定if (decimal is comma)。如果是这种情况,那么这应该会有所帮助:

var decimalSeparator = System.Globalization.CultureInfo.CurrentCulture
    .NumberFormat.NumberDecimalSeparator.ToString();

e.Handled = !((e.Key >= Key.D0 && e.Key <= Key.D9) || 
              (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) ||
              (e.Key == Key.Space) || 
              (e.Key == Key.Decimal && decimalSeparator == ","));

【讨论】:

    【解决方案2】:

    您可以使用Key.Decimal。它是数字键盘上的一个键,对应于美国布局上的 . 和俄罗斯布局上的 ,

    e.Handled = !((e.Key >= Key.D0 && e.Key <= Key.D9) || 
                (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) ||
                e.Key == Key.Space || e.Key == Key.Decimal);
    

    【讨论】:

    • 这是一个问题:我需要在十进制中只允许逗号
    • @Batmannn 你测试了吗?当您使用 Russian layout 时,它只允许在 Decimal 中使用逗号。它只允许. 仅当您使用其他布局(如美国布局)时。那么这正是预期的问题。
    • 我测试过了。当我使用英文布局时 - 它允许点,当我使用俄语布局时 - 它允许逗号(点和逗号是十进制的)。但是当我有英文布局时,我需要禁止点作为小数。
    • 我需要这样的东西: if (Decimal is comma) - allow if (Decimal is dot) - forbid
    • @Batmannn 这是不可能的,因为默认情况下会根据本地化使用文化小数点分隔符!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多