我可能有错误提出这个问题。这是一个棘手的主张,我迫切需要解决方案: - (
我想以两种不同的方式触发textBox1_KeyDown
,但是根据某些标准键入相同的密钥。下面的代码会更清晰。
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (textBox1.Text == "")
{
if (e.KeyCode == Keys.Enter)
{
textBox1.Text = "x";
}
}
if (textBox1.Text != "")
{
if (e.KeyCode == Keys.Enter)
{
textBox1.Text = "y";
}
}
}
我要做的是当我按下textBox1上的Enter按钮时,如果没有文字,我希望它显示“x”。如果其中有一些文本,那么我希望按Enter键时文本框显示“y”。当我按照上面编写的方式执行时,这两个过程都在一个实例中发生。也就是说,当textBox1
为空时我按Enter键会显示“y”(应为“x”)。这意味着它首先显示“x”,然后由于文本框中有数量,文本变为“y”,由我的代码调用。如何分离这两个功能?就像我希望文本框在空白时只显示“x”并按Enter键,或者当它不为空时它应该只显示“y”并按Enter键。
我一定是想傻傻的东西..谢谢..请给我一些代码。我几乎不懂技术术语..
答案 0 :(得分:3)
这是因为两个if语句都被执行了。第一个if语句执行并使文本框中的文本不为空。这会导致下一个if语句也会触发。简单地这样做应该解决它:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (textBox1.Text == "")
{
if (e.KeyCode == Keys.Enter)
{
textBox1.Text = "x";
}
}
else if (textBox1.Text != "")
{
if (e.KeyCode == Keys.Enter)
{
textBox1.Text = "y";
}
}
}
注意在第二个if语句中添加“else”。
答案 1 :(得分:1)
首先,您可以将return;
放入最深层嵌套的if
语句中,以便下一个if
不会被执行。
您可以做的另一件事是颠倒条件的顺序,因此您在处理程序的顶部而不是底部测试if (textBox1.Text != "")
。
最后,你可以在两个条件之间使用else
。
答案 2 :(得分:1)
根据你在那里写的内容,你可以翻转你的if语句的顺序,或者将第二个块作为else,否则就是。
答案 3 :(得分:1)
你正在寻找这样的东西,所以我相信:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
//determine if text is empty or otherwise equal to 'x'...
if (textBox1.Text == string.Empty || textBox1.Text != "x")
{
//confirmed, set to 'x'...
textBox1.Text = "x";
}
else //and a catch-all for y
{
//text wasn't empty or 'x', set to 'y'...
textBox1.Text = "y";
}
}
你也可以使用ternary operator:
以一种简短的方式实现这一目标//get a copy of the text
var value = textBox1.Text;
//set textbox value to 'x' if not empty or equal to 'x', otherwise 'y'
textBox1.Text = value == string.Empty || value != "x" ? "x" : "y";
答案 4 :(得分:1)
也许我错过了什么,但为什么不添加其他东西:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (textBox1.Text == "")
{
if (e.KeyCode == Keys.Enter)
{
textBox1.Text = "x";
}
}
else if (textBox1.Text != "")
{
if (e.KeyCode == Keys.Enter)
{
textBox1.Text = "y";
}
}
}