限制在特定地点c#上写特定字符

时间:2015-05-13 05:46:35

标签: c# winforms char

我为用户输入创建了一个文本框,用于接收文本并将其转换为double。我不想让用户崩溃我的程序,但我也想知道我该怎么做而不是尝试catch。输入为正或负双。

现在我明白了:

private void txtForceX_KeyPress(object sender, KeyPressEventArgs e)
{
    char ch = e.KeyChar;

    if (ch == 44 && txtForceX.Text.IndexOf(',') != -1)
    {
        e.Handled = true;
        return;
    }

    if (ch == 45 && txtForceX.Text.IndexOf ('-') != -1)
    {
        e.Handled = true;
        return;
    }

    if (!char.IsDigit(ch) && ch != 8 && ch != 44 && ch != 45)
    {
        e.Handled = true;
    }
}

如您所见,限制只有1减( - ),只有1个小数分隔符(,)可用。 如何限制减号( - )只写在第一位? 例如:

  • -140,3没关系
  • 41-,02不行(崩溃程序) - >这需要设置

2 个答案:

答案 0 :(得分:3)

最简单的方法是使用double.TryParse尝试将输入的值转换为数字。这样的事情应该有效(未经测试):

private void txtForceX_KeyPress(object sender, KeyPressEventArgs e)
{
   double value;
   if(!double.TryParse(txtForceX.Text, out value)
       e.Handled = true;
} 

编辑:正如Jon在评论中指出的那样,这将无法按预期工作,最安全的做法可能是让用户输入任何内容,然后在外部验证输入,例如:如果输入无效,则不允许用户保存数据:

private void txtForceX_KeyPress(object sender, KeyPressEventArgs e)
{
   double value;
   var isValid = double.TryParse(txtForceX.Text, out value);
   btnSave.Enabled = isValid;
}

补充/替换此错误消息,无效的值的可视指示,或更适合您的应用程序的任何内容。

答案 1 :(得分:0)

你说 - 如何限制减号( - )只写在第一位?

这样你可以做到: -

if (ch == 45 && textBox1.Text.Length > 0)
{
    e.Handled = true;
    return;
}