在 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 应用程序中,流是基于事件的。没有预先确定的事件顺序,也没有阻塞调用。
您的控制台代码检查外部 if
中 answer
变量的值,然后等待用户的新输入以进行进一步处理。您的 WinForm 代码检查 btn.Name
,将一些文本附加到文本框,然后 立即 移动到下一个 if
陈述。如果你想停止这个序列,return
从你的事件处理程序,并在不同的事件处理程序中继续你的流程。
潜在-1 的注意事项: 是的,我知道控制台应用程序可以基于事件,但不一定是顺序性质等等。这个答案应该可以帮助 OP 理解逻辑和问题。
例如,我在控制台中有一个嵌套的 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 应用程序中,流是基于事件的。没有预先确定的事件顺序,也没有阻塞调用。
您的控制台代码检查外部 if
中 answer
变量的值,然后等待用户的新输入以进行进一步处理。您的 WinForm 代码检查 btn.Name
,将一些文本附加到文本框,然后 立即 移动到下一个 if
陈述。如果你想停止这个序列,return
从你的事件处理程序,并在不同的事件处理程序中继续你的流程。
潜在-1 的注意事项: 是的,我知道控制台应用程序可以基于事件,但不一定是顺序性质等等。这个答案应该可以帮助 OP 理解逻辑和问题。