我有以下代码:
private void txtNR_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.'))
{
e.Handled = true;
}
else
{
}
// only allow one decimal point
if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
{
e.Handled = true;
}
else
{
MessageBox.Show("You cannot type letters!");
}
}
我的问题是:当我尝试输入字母时,警告信息即将出现,但是当我尝试输入数字时也会发生同样的情况,并且在我点击确定消息后,该号码将被写下来内。你能帮我理解为什么吗?
答案 0 :(得分:0)
替换
else { }
与
else
由于额外{}
,即使处理了第一个if语句,也会执行第二个if语句。因此,即使字符是数字(已经处理过),您也会看到消息框
答案 1 :(得分:0)
你的病情没问题。你只需要将Char设置为空
试试这个:
// only allow one decimal point
if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
{
e.Handled = true;
}
else
{
MessageBox.Show("You cannot type letters!");
e.KeyChar = '\0';
}
答案 2 :(得分:0)
我建议你在用户输入后验证文本框的内容。就像@Sinatr所说的那样,对于用户来说,每次写错输入时都会显示一个消息框,这可能会很烦人。
我认为它也应该简化你的代码。
如果文本不是数字,则显示消息框,类似于此。
textbox_Validating(){
decimal d;
if(decimal.TryParse(textBox1.Text, out d))
{
//valid
}
else
{
//invalid
MessageBox.Show("Please enter a valid number");
return;
}
}
类似的东西...抱歉代码中的最终错误。 祝你好运。
答案 3 :(得分:0)
你没有说出你的总体目标是什么。
但是要正确处理事件,您将在此之后工作。你并不总是想要一个弹出消息,更好地验证表单提交。
您是否尝试制作小数文本框?
您还必须考虑复制和粘贴这些事件不会涵盖的内容。
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.'))
{
e.Handled = true;
}
else
{ // only allow one decimal point
if ((e.KeyChar == '.'))
{
if (((TextBox) sender).Text.Contains("."))
{
e.Handled = true;
}
}
else
{
if (char.IsControl(e.KeyChar))
{
return;
}
if (!char.IsDigit(e.KeyChar))
{
MessageBox.Show("You cannot type letters!");
}
}
}
答案 4 :(得分:0)
您的代码应该是这样的:
if (!(char.IsControl(e.KeyChar) || char.IsDigit(e.KeyChar) || (e.KeyChar == '.')))
{
e.Handled = true;
MessageBox.Show("You cannot type letters!");
}