在 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
也会捕获,在这种情况下它比您期望的长度大一) .
我正在制作一个简单的电子邮件发件人,我想做的是检查 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
也会捕获,在这种情况下它比您期望的长度大一) .