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我不知道我的意思是,您需要设置文本框的按键事件处理程序(在设计模式期间,在“属性”窗口中),以便在文本框中按下一个键时,此方法由运行时调用。