我有一个小问题,因为我听不懂。
我用两种形式(登录和仪表板)编写了一个WinForm应用程序
启动表单是登录表单。 如果登录确实有效,则该表格应切换到仪表板表格。 登录表单应该被隐藏/禁用。
在代码中,应用程序编写了一个条目,用户已登录(保持登录状态),并且下次启动时不必输入凭据。
现在的问题是,启动应用程序时始终显示“登录”表单。尽管应用程序通过了this.hide()这个点。
这是“登录”表单中的代码,这些代码段
public LOGIN()
{
InitializeComponent();
if (File.Exists(programpath + "config.dat"))
{
lines = System.IO.File.ReadAllLines(programpath + "config.dat");
uid = lines[0];
pwd = lines[1];
WebClient client = new WebClient();
NameValueCollection formParams = new NameValueCollection();
formParams["uid"] = Encrypt.DecryptString(uid,"test");
formParams["pwd"] = Encrypt.DecryptString(pwd, "test");
byte[] responseByte = client.UploadValues(url, "POST", formParams);
string result = Encoding.UTF8.GetString(responseByte);
if (result == "true")
{
var frm = new Dashboard();
frm.Location = this.Location;
frm.StartPosition = FormStartPosition.Manual;
frm.FormClosing += delegate { this.Show(); };
frm.Show();
this.Hide();
}
}
}
有人可以向我解释为什么会发生这种情况,我该怎么办?
答案 0 :(得分:0)
发表评论的人回答了您的问题,但这是更多解释:
如果您转到Microsoft docs,则会发现Windows表单FORM
的生命周期
因此在启动表单时会这样:
文档中对Form.Shown
的解释是Occurs whenever the form is first displayed.
因此基本上,当您在代码中进行操作时:
Form f1 = new Form();
您已经创建了public f1()
文件中运行f1
的表单实例,但该表单实例仍未显示,因此您无法隐藏未显示的内容。
当您调用f1.Show()
或f1.ShowDialog()
时,它将以show
的形式出现,并且是在触发Form.Shown
部分之前完成的,因此在此方法中将以您的形式显示。
解决方案是转到表单并创建Form.Shown()
事件(在设计窗口中选择表单(不控制表单内部),在右侧具有属性窗口。在属性窗口的顶部栏中,您可以在属性和事件之间切换。切换到事件并查找Shown
事件。找到事件后,双击右侧的空格,它将自动为您创建代码事件)
现在,当您创建显示的事件时,将代码复制到其中即可使用。
答案 1 :(得分:-2)
我必须在静态void main方法中添加If语句。 在这种情况下,它确实有效。