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

如何根据两个标准以两种不同的方式触发同一事件?(C#),c#,events,multiple-instances,C#,Events,Multiple Instances,我提出这个问题的措辞可能有误。这是一个棘手的问题,我迫切需要解决方案:-( 我想用两种不同的方式触发textBox1\u KeyDown,但要根据某些条件按下同一个键。下面的代码会更清晰 private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (textBox1.Text == "") { if (e.KeyCode == Keys.Enter)

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

我想用两种不同的方式触发
textBox1\u 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”。如果有文本,我希望文本框显示“y”按Enter键。当我按照上面的编码方式执行时,两个过程都发生在一个实例中。也就是说,当
textBox1
为空时,按Enter键会显示“y”(应该是“x”)。这意味着它首先显示“x”,然后由于文本框中有一个数量,文本会变成“y”正如我的代码所调用的那样。如何区分这两个功能??比如我希望文本框在为空且我按Enter键时仅显示“x”,或者在不为空且我按Enter键时仅显示“y”


我一定错过了一些愚蠢的东西。谢谢。请给我代码。我几乎不懂技术术语。

首先,您可以将
return;
放在嵌套最深的
if
语句中,这样下一个
if
就不会执行了

您可以做的另一件事是颠倒条件的顺序,因此您可以在处理程序的顶部而不是底部测试
if(textBox1.Text!=“”)


最后,您可以在两个条件之间使用
else

根据您在那里写的内容,您可以翻转if语句的顺序,或者将第二个块设置为else或else if。

您正在寻找类似的内容,因此我相信:

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";
    }
}
您还可以通过以下方式以快捷方式实现这一点:


也许我遗漏了什么,但为什么不添加一个:

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语句都被执行。第一个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”。

恐怕我在您遇到的问题中遗漏了一些东西。每个人似乎都有相同的答案,因此您可能需要更好地解释发生了什么。它确实起了作用。谢谢……事实上,我的代码更复杂。所以当我尝试这一点时(我确实尝试了),出现了一些其他错误。我想可能是这个else-if方法不起作用。现在我知道问题不在于else-if语句。要添加到u,即使是第一个循环结束时的
return
,也会使这个方法起作用。感谢Matt Greer,它确实解决了问题。实际上我的代码更复杂。所以当我尝试这个方法时(我确实尝试过),又出现了一些错误。我想可能是这个else if方法不起作用。现在我知道问题不在于else if语句。要添加到u,即使是第一个循环结束时的
return
,也会使这个方法起作用,它确实解决了问题。实际上,我的代码更复杂。所以当我尝试这个方法时(我确实尝试了),又出现了一些错误。我想可能是这个else-if方法不起作用。现在我知道问题不在于else-if语句。要添加到u中,即使在第一个循环结束时
return
,也会使这个方法起作用。您似乎给出了最全面的答复。让我问您,如果我全部使用这三种方法,会怎么样我的案例更有力?因为在我部署的地方,它永远不会得到正确的执行。或者使用这三种方法会适得其反吗?如果一起使用,它们不会适得其反,但只需要一种方法。
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";
        }
    }
}