C#形式不';隐藏

C#形式不';隐藏,c#,forms,C#,Forms,我正在申请,我有两张表格。主窗体(主应用程序)和登录窗体将启动。如果用户有API密钥,它将进行检查,如果正确,它应该隐藏登录表单并显示主表单。如果不正确或用户根本没有api密钥,则应继续显示登录表单,如果登录详细信息正确,则应隐藏登录表单并显示主表单 如果我登录并且我的详细信息正确,登录窗口将被隐藏,主窗体将被显示,但是,如果我有一个API密钥并且它是正确的,它不会隐藏登录窗体 此时我的登录详细信息正确: case "True": string apiToken = subparts[0];

我正在申请,我有两张表格。主窗体(主应用程序)和登录窗体将启动。如果用户有API密钥,它将进行检查,如果正确,它应该隐藏登录表单并显示主表单。如果不正确或用户根本没有api密钥,则应继续显示登录表单,如果登录详细信息正确,则应隐藏登录表单并显示主表单

如果我登录并且我的详细信息正确,登录窗口将被隐藏,主窗体将被显示,但是,如果我有一个API密钥并且它是正确的,它不会隐藏登录窗体

此时我的登录详细信息正确:

case "True":
string apiToken = subparts[0];

RegistryKey key = Registry.CurrentUser.CreateSubKey("Prtscreen");
key.SetValue("API_TOKEN", subparts[0]);
key.Close();

MessageBox.Show("Logged in as " + username.Text);

UserDetails.UserName = username.Text;
UserDetails.APIKey = subparts[0];

this.Hide();
new MainForm().Show();
break;
发生的情况:我的详细信息是正确的,登录窗口“消失”,主窗体显示。现在我有了一个API密钥,它是正确的:

UserDetails.UserName = result.Split('|')[1];
UserDetails.APIKey = value.ToString();

this.Hide();
Program.MainForm = new MainForm();
Program.MainForm.Show();

return true;

但出于某种原因,它并没有隐藏登录窗口。这两个代码都在登录表单代码文件中。我不知道有什么不同。

我认为表单不能在自己的加载事件中更改其可见性或调用自身的显示/隐藏。对于快速修复,可以使用计时器短暂延迟检查,直到表单完成加载。在timer-eassed/tick事件中,您将在这里调用CheckAPI方法

你能给我们看更多的代码吗,很难看到这里发生了什么。我们似乎在一个switch case语句中?它只是关于显示和隐藏不起作用的表单。上面的两个代码都有相同的代码(用于显示和隐藏,至少是隐藏),但是对于第二个代码,它只是不隐藏登录表单,而在第一个代码中是这样。那么为什么每次都创建不同的Show()代码呢?使用程序一定有一定的意义。还有,这些都是在Form_Load中发生的吗?这是我的完整代码:您知道//CheckAPI();被注释掉了吗?据我所知,代码甚至没有被调用。