C# 文本框仅接受点(.)和破折号(-)
我试过一些密码,但没用 比如说 我发现了这个,但它不起作用:C# 文本框仅接受点(.)和破折号(-),c#,textbox,numbers,C#,Textbox,Numbers,我试过一些密码,但没用 比如说 我发现了这个,但它不起作用: if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.') { e.Handled = true; } // only allow one decimal point if (e.KeyChar == '
if (!char.IsControl(e.KeyChar)
&& !char.IsDigit(e.KeyChar)
&& e.KeyChar != '.')
{
e.Handled = true;
}
// only allow one decimal point
if (e.KeyChar == '.'
&& (sender as TextBox).Text.IndexOf('.') > -1)
{
e.Handled = true;
}
这里有一个非常简单但可以理解的错误
KeyPressEventArgs
的Handled
属性应设置为true,以防止操作系统进一步处理密钥
换句话说,如果要阻止该键,请将其设置为true
因此,像这样更改代码,以便在按下的键符合条件时进行进一步处理
还请参见如何引入布尔变量以使代码可读
下面的代码允许
- 如果是文本框中的第一个字符,则为(-)字符
- 如果不是第一个字符且没有其他点,则为(.)字符
- 任何控制字符
- 和任何数字
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
bool isControl = char.IsControl(e.KeyChar);
bool isDigit = char.IsDigit(e.KeyChar);
bool isDot = e.KeyChar == '.';
bool alreadyHasADot = (sender as TextBox).Text.IndexOf('.') != -1;
bool isHyphen = e.KeyChar == '-';
bool isFirstChar = (sender as TextBox).Text.Length == 0;
bool isAllowed =
isControl ||
isDigit ||
(isDot && !isFirstChar && !alreadyHasADot) ||
(isHyphen && isFirstChar);
if (!isAllowed)
{
e.Handled = true;
}
}
你好这是哪个事件处理程序?有效的输出是什么?好的,一个
那么-
呢?其他字符?我收到这个错误:``System.NullReferenceException:'Nesne başvurusu bir nesneninörneğine ayarlanmadı'(…as System.Windows.Forms.TextBox),null döndürdü```你好对我有用。你能发布你的代码的最新版本吗?如果这是文本框
事件,则发送方
始终是一个文本框handler@SelimEmin您在哪个事件处理程序中执行此代码?oguz ozgul我不知道我的意思是,您需要设置文本框的按键事件处理程序(在设计模式期间,在“属性”窗口中),以便在文本框中按下一个键时,此方法由运行时调用。