我正在开发一个项目,我希望有一个文本输入框,如果数字为0或更大,则将文本的前颜色设置为黑色,如果低于0则设置为红色。这是代码到目前为止,它已经输入到“TextChanged”的文本框事件处理程序下,因此每次文本更改时它都会运行。这是代码,
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.TextLength > 1)
{
valueCheck = Convert.ToInt32(textBox1.Text);
}
if (valueCheck < 1)
{
textBox1.ForeColor = Color.Red;
}
else if (valueCheck > 0)
{
textBox1.ForeColor = Color.Black;
}
else
{
textBox1.ForeColor = Color.Black;
}
valueCheck = 0;
}
当我输入任意一种数字时会出现问题,它是红色的。但是当我输入第二个正数时,它会变黑。我不太确定发生了什么,我认为这可能与代码在每次传递中验证的方式有关。如果有人可以帮助我,我会很感激。
答案 0 :(得分:1)
if(textBox1.TextLength&gt; 1)
当您输入任意类型的1个数字时,textBox1的长度不会大于1,因此未设置valueCheck。
此外,在用户只输入( - )符号的情况下,Convert.ToInt32可以抛出异常。
private void textBox1_TextChanged(object sender, EventArgs e)
{
int valueCheck = 0;
if (textBox1.TextLength >= 1)
{
Int32.TryParse(textBox1.Text, out valueCheck);
}
if (valueCheck < 1)
{
textBox1.ForeColor = Color.Red;
}
else if (valueCheck > 0)
{
textBox1.ForeColor = Color.Black;
}
valueCheck = 0;
}
答案 1 :(得分:0)
如果valueCheck
大于1且不大于0,则您的第一个if语句只会设置TextLength
。
示例:
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.TextLength != 0) // more than 0 characters
{
valueCheck = Convert.ToInt32(textBox1.Text);
}
if (valueCheck >= 0) // Greater/Equal than 0, Black
{
textBox1.ForeColor = Color.Black;
}
else // less than 0, Red
{
textBox1.ForeColor = Color.Red;
}
valueCheck = 0;
}
或
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.TextLength != 0)
{
valueCheck = Convert.ToInt32(textBox1.Text);
}
textBox1.ForeColor = valueCheck >= 0 Color.Black : Color.Red
valueCheck = 0;
}