我有一些掌上电脑应用程序,我在这里描述了一个严重的问题:https://stackoverflow.com/questions/472598。在寻找解决方案时,我在Main()中尝试了一些非常愚蠢的代码:
[MTAThread]
static void Main()
{
Application.Run(new Tasks());
Application.Exit();
}
并在退出时设置断点。如果我只是运行应用程序,然后关闭窗口,则达到断点。如果我运行应用程序,然后打开另一个窗口:
private void questButton_Click(object sender, EventArgs e)
{
QuestionnairesWindow questWindow = new QuestionnairesWindow();
questWindow.Show();
this.Hide();
}
然后从它回到初始窗口:
private void backButton_Click(object sender, EventArgs e)
{
Tasks tasksWindow = new Tasks();
tasksWindow.Show();
this.Close();
}
并以与第一次相同的方式关闭最初的一个,从未到达Apllication.exit()代码,并且我的印象是应用程序并未真正关闭(我无法再次打开它)。抱歉,如果描述复杂
编辑:问题是 - 任何想法为什么表现不同?
答案 0 :(得分:2)
new Tasks()
中的{p> Main()
与Tasks tasksWindow = new Tasks();
不是同一个对象
你有2个任务对象,所以关闭第二个,第一个仍然存在,永远不会死亡。您需要传递QuestionnairesWindow
当前Tasks
的引用。
您可以使用其他QuestionnairesWindow
构造函数执行此操作:
private Tasks tasks;
public QuestionnairesWindow(Tasks t)
{
this.tasks = t;
}
使用:
new QuestionnairesWindow(this).Show(); // where this = current `Tasks` created in `Main`
答案 1 :(得分:0)
这条线似乎是问题所在:
Tasks tasksWindow = new Tasks();
如果我正确理解您的代码,请在backButton_Click中创建“任务”表单的新实例,而不是显示您最初隐藏的实例。这意味着应用程序永远不会终止,因为仍然有一个窗口打开但隐藏。
您可能想要做的是将Tasks表单引用传递给QuestionnairesWindow表单。
答案 2 :(得分:0)
您遇到的问题是,在backButton_Click中,您正在创建“任务”窗口的新实例。原始的“任务”窗口仍在运行,只是隐藏了。我怀疑你需要将对原始Tasks表单的引用传递给QuestionnairesWindow,以便它可以选择再次显示它。
您需要在QuestionnairesWindow上添加一个公共/内部方法,您可以在其中设置哪个Tasks表单导致QuestionnairesWindow打开。在调用this.Hide()之前,使用 this 引用在questButton_Click中调用此方法。该引用将存储在QuestionnairesWindow中的私有变量中。
然后在backButton_Click中,使用此私有变量来调用.Show()方法,以显示父窗体。