限制在特定位置写入特定字符 C#

Restrict write of specific char on specific place c#

我为用户输入制作了一个文本框,它接收文本并将其转换为双精度文本。我不想让用户使我的程序崩溃,但我也想知道我该怎么做而不是尝试捕获。输入为正或负双精度值。

现在我得到了这个:

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 个小数点分隔符 (,) 可用。 如何限制减号(-)只写在第一位? 例如:

最简单的方法是只使用 double.TryParse 尝试将键入的值转换为数字。这样的东西应该可以工作(未测试):

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

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

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

Complement/replace 这带有错误消息、值无效的视觉指示或更适合您的应用程序的任何内容。

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

这样你就可以做到:-

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