我为用户输入创建了一个文本框,用于接收文本并将其转换为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个小数分隔符(,)可用。 如何限制减号( - )只写在第一位? 例如:
答案 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;
}