在 winform 中实现嵌套的 If 循环

Implementing nested If-cycles in a winform

例如,我在控制台中有一个嵌套的 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() 停止一样?

if (btn.Name == "btn1")
{
    richTextBox1.AppendText("Pressed1");
    if (btn.Name == "btn1")
    {
        richTextBox1.AppendText("pressed1");
    }
    else (btn.Name == "btn2")
    {
        richTextBox1.AppendText("pressed2");
    }

发布的代码片段不完整,但很容易推测出混淆的地方。

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

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

您的控制台代码检查外部 ifanswer 变量的值,然后等待用户的新输入以进行进一步处理。您的 WinForm 代码检查 btn.Name,将一些文本附加到文本框,然后 立即 移动到下一个 if 陈述。如果你想停止这个序列,return 从你的事件处理程序,并在不同的事件处理程序中继续你的流程。

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