限制在特定位置写入特定字符 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 个小数点分隔符 (,) 可用。
如何限制减号(-)只写在第一位?
例如:
- -140,3 可以
- 41-,02 不正常(程序崩溃)--> 这个需要设置
最简单的方法是只使用 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;
}
我为用户输入制作了一个文本框,它接收文本并将其转换为双精度文本。我不想让用户使我的程序崩溃,但我也想知道我该怎么做而不是尝试捕获。输入为正或负双精度值。
现在我得到了这个:
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 不正常(程序崩溃)--> 这个需要设置
最简单的方法是只使用 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;
}