C# 确保教科书不允许按字母顺序按键。。
我似乎有一个非常简单的问题,但不明白为什么它似乎不起作用 我必须将按键事件附加到此功能C# 确保教科书不允许按字母顺序按键。。,c#,validation,textbox,C#,Validation,Textbox,我似乎有一个非常简单的问题,但不明白为什么它似乎不起作用 我必须将按键事件附加到此功能 void length_textbox_numeric_check(object sender, KeyPressEventArgs e) { if ((char.IsNumber(e.KeyChar)) && (char.IsControl(e.KeyChar)) ) { e.Handled = true;
void length_textbox_numeric_check(object sender, KeyPressEventArgs e)
{
if ((char.IsNumber(e.KeyChar)) && (char.IsControl(e.KeyChar)) )
{
e.Handled = true;
}
else
{
e.Handled = false;
}
}
它接受字符、数字和空格等?。。。但是根据代码,它应该只接受数字和退格吗?那么为什么它也接受信件呢?您想取消按键。不知道你听了哪件事。我会选择KeyDown:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (!char.IsNumber((char)e.KeyValue) && !char.IsControl((char)e.KeyValue))
e.SuppressKeyPress = true;
}
基于@BlakeThingstad评论。这把它修好了
void length_textbox_numeric_check(object sender, KeyPressEventArgs e)
{
if (!(char.IsNumber(e.KeyChar)) && !(char.IsControl(e.KeyChar)) )
{
e.Handled = true; // Handled states whether it should handled
// normally (true) or differently (false)
}
else
{
e.Handled = false;
}
}
设置KeyPressEventArgs.Handled as true表示字符已被处理且不再需要处理(即,它不会被放入文本框中),您的表达式将始终为false-字符不能同时是数字和控制字符。所以它总是将e.Handled设置为false-这允许所有字符都被接受。。。我不确定我是否理解它背后的逻辑。。。我想这就是饼干破碎的方式。我想你明白了,现在我看到了关于if条件的其他答案,所以我删除了关于它的答案,让我知道这是否是一个混乱的来源。我想让我困惑的是措辞。。我想语义应该更清楚一点。。但是嘿。。没关系…我去按键盘了。。。你为什么建议按下键?这只是一个虚拟项目,但在什么情况下才有意义呢?通常你想知道用户什么时候开始在你的文本框中做什么。如果他一分钟前开始按,然后改变了焦距什么的话就不会了@Lke:查看这两方面的文档。这可能不是您的项目的问题,但您将看到KeyPress事件不允许您看到。其他事件(如KeyDown)允许您查看所有字符和修饰符(CTRL/ALT等)。准确地说,将Handled属性设置为true表示按键已由事件处理程序处理,因此不应进一步处理。将其设置为false表示未在事件中处理该事件,因此应将其传递给默认事件处理程序。声明中很好地说明,“如果未处理该事件,它将被发送到操作系统进行默认处理。将handled设置为true可取消按键事件。”