C# 在winform中实现嵌套的If循环
例如,我在控制台中有一个嵌套的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 (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");
}