我想写一个程序,根据特定的条件打开特定的窗体。在这个特定的例子中,如果shift键按下,它将调用Form 1。如果该键没有按下,它将检查注册表中的一个键。如果该键不在那里,它将加载Form 1。如果该键在那里,它将做一些检查,加载值,然后加载Form 2。
我看到的奇怪行为是,如果Form 1被加载--无论是通过按住Shift键,还是通过不在那里的reg键,如果用户单击右上角的X,它将返回到它原来的Program.cs代码,而不退出应用程序。
这是来自Program.cs的部分代码。我想在Program.cs中进行检查,所以我没有;不必加载和隐藏表单。
if (Control.ModifierKeys == Keys.Shift)
{
//MessageBox.Show("Shift key held down");
Application.Run(new Form1());
}
using (var hkcu = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64))
using (var key = hkcu.OpenSubKey(@"SOFTWARE\clpCopy"))
{
if (key == null)
{
hkcu.Close();
//MessageBox.Show("Key not found.");
Application.Run(new Form1());
//MessageBox.Show("Returning from Form 1.");
}
}
在Form 1上,我将Form1_FormClosing添加到Form1.cs中以捕获表单关闭:
private void Form1_FormClosing(Object sender, FormClosingEventArgs e)
{
Application.Exit();
}
但是,当您单击Form 1上的X时,它不会退出应用程序,而是返回到Program.cs并继续执行其余代码。
我在Form 1上有一个“取消”按钮,它可以工作并关闭应用程序。
如果我单击X,如何强制窗体关闭?为什么它返回到Program.cs中的代码?
1条答案
按热度按时间brgchamk1#
你看到的是预期的行为。
请尝试以下代码:
在单击窗体或关闭窗体之前,单词
Hello
不会显示在控制台上。Application.Run
会一直保持执行,直到Application.Exit()
调用或主窗体关闭,然后继续执行。Application.Exit()
不会中止线程或关闭进程-它只是关闭所有窗体并清除消息泵,允许调用代码继续。