在 winforms 中出错 textbox.TextLength

get wrong textbox.TextLength in winforms

我正在制作一个简单的电子邮件发件人,我想做的是检查 textbox.text 是否有 14 个字符。如果它是 14 - 那么文本变成绿色,如果小于它变成红色。我在输入第 14 个字符时遇到问题。它不会变绿。当我键入另一个未显示的字符时会发生这种情况,因为我的 MaxLength = 14,但我仍然需要输入第 15 个字符。此外,当我尝试删除字符时,字符串不会随着第一个删除的字符变红,而是在删除几个字符后变红。我尝试过 Regex 和 trim() 之类的东西,认为可能会有一些特殊字符,但它似乎不起作用。我还记录了一个 video 问题,以使其更具描述性。

private void trackBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        trackBox1.Text = RemoveSpecialCharacters(trackBox1.Text);
        trackBox1.Text = trackBox1.Text.Replace("\r\n", "\n");



        errorBox.Text = trackBox1.TextLength.ToString();
        
        if (trackBox1.TextLength < 14)
        {
            trackBox1.ForeColor = Color.Red;
        } else if (trackBox1.TextLength == 14)
        {
            trackBox1.ForeColor = Color.Green; 
        }

        trackBox1.Text.TrimEnd();

    }

   

    public static string RemoveSpecialCharacters(string str)
    {
        return Regex.Replace(str, "[^a-zA-Z0-9_.]+", "", RegexOptions.Compiled);
    }

我不确定 trackBox1.TextLength 是否是获取长度的正确方法

trackBox1.Text.Length //try this
//and also your event 
private void yourTextBox_TextChanged(object sender, EventArgs e)
{
  
}

而不是使用 trackBox1_Keypress 将你的 if statement 放在 trackBox1_TextChanged 事件中并计算文本的长度你应该使用 trackbox.Text.Length 而不是 trackbox1.TextLength

这是 TextChanged 事件中的示例代码段,如果文本长度大于或等于 14,它会将颜色从红色更改为绿色。

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (textBox1.Text.Length <= 14)
        {
            textBox1.ForeColor = Color.Red;
        }
        else
        {
            textBox1.ForeColor = Color.Green;
        }

    }

查看 Control.KeyPress 文档...事件在按下键后触发,但 在字符实际进入文本框之前。这意味着您正在检查的长度比您期望的长度少一(除非刚刚按下的键是退格键,KeyPress 也会捕获,在这种情况下它比您期望的长度大一) .