Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确保教科书不允许按字母顺序按键。。_C#_Validation_Textbox - Fatal编程技术网

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可取消按键事件。”