如何根据两个标准以两种不同的方式发起同一事件? (C#)

时间:2011-03-30 22:25:21

标签: c# events multiple-instances

我可能有错误提出这个问题。这是一个棘手的主张,我迫切需要解决方案: - (

我想以两种不同的方式触发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键。

我一定是想傻傻的东西..谢谢..请给我一些代码。我几乎不懂技术术语..

5 个答案:

答案 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";
        }
    }
}