C# 在winform中实现嵌套的If循环

C# 在winform中实现嵌套的If循环,c#,winforms,nested,C#,Winforms,Nested,例如,我在控制台中有一个嵌套的if循环,如 if (answer == "one") { Console.WriteLine("one or two?"); string answer = Console.ReadLine(); if (answer == "one") { Console.WriteLine("pressed1"); } else Console.WriteLine("pressed2")

例如,我在控制台中有一个嵌套的if循环,如

if (answer == "one")
{
    Console.WriteLine("one or two?");
    string answer = Console.ReadLine();

    if (answer == "one")
    {
        Console.WriteLine("pressed1");
    }
    else 
        Console.WriteLine("pressed2")
    //....and so on
}
一切正常。 但是如果我尝试在winform中执行同样的操作,结果是通过按Button1我得到了所有标记为“btn1”的嵌套结果。因此我得到了“pressed 1 pressed 1”。如何使用console.ReadLine()使程序以在console中停止的方式停止


发布的代码片段并不完整,但很容易猜测混淆之处

基本上,您的控制台应用程序是按顺序处理的,在某些阻塞调用中,输入被注入到流中

另一方面,在WinForm应用程序中,流是基于事件的。没有预定的事件序列,也没有阻塞调用

控制台代码检查外部
if
answer
变量的值,然后等待用户的新输入以进行进一步处理。WinForm代码检查
btn.Name
,将一些文本附加到文本框中,然后立即转到下一个
if
语句。如果要停止此序列,
从事件处理程序返回
,并在其他事件处理程序中继续流程


潜在-1的注意事项:是的,我知道控制台应用程序可以基于事件,本质上不必是顺序的,等等。这个答案应该有助于OP理解逻辑和问题。

您最好的选择是内部状态。每次按下按钮时,记录(内部)按下按钮的时间和顺序。因此,如果您的答案是一个,那么它将输出“一个或两个?”“pressed1”,在winforms中,您应该得到“pressed1”“pressed1”?如果这是真的,我看不出问题出在哪里。你的代码没有意义。第一条if()语句检查按钮是否为“btn1”,然后嵌套的if()语句再次检查。“else(btn.Name==”btn2“)在这种情况下永远不会为真。谢谢你,阿米特。我更清楚地了解问题所在。仍然不知道如何进行块调用以使程序等待按下下一个按钮。你不能,而且这不是基于事件的流程的工作方式。您需要将逻辑拆分为多个部分,在触发相关事件时执行它们的“魔法”。例如-有两个按钮。单击第一个按钮将设置具有第一个值的文本字段,单击第二个按钮将设置第二个值。
if (btn.Name == "btn1")
{
    richTextBox1.AppendText("Pressed1");
    if (btn.Name == "btn1")
    {
        richTextBox1.AppendText("pressed1");
    }
    else (btn.Name == "btn2")
    {
        richTextBox1.AppendText("pressed2");
    }